{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Классификация текстов с использованием BERT для «Викишоп»"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Интернет-магазин «Викишоп» запускает новый сервис. Теперь пользователи могут редактировать и дополнять описания товаров, как в вики-сообществах. То есть клиенты предлагают свои правки и комментируют изменения других. Магазину нужен инструмент, который будет искать токсичные комментарии и отправлять их на модерацию. \n",
    "\n",
    "Обучите модель классифицировать комментарии на позитивные и негативные. В вашем распоряжении набор данных с разметкой о токсичности правок.\n",
    "\n",
    "Постройте модель со значением метрики качества *F1* не меньше 0.75. \n",
    "\n",
    "**Инструкция по выполнению проекта**\n",
    "\n",
    "1. Загрузите и подготовьте данные.\n",
    "2. Обучите разные модели. \n",
    "3. Сделайте выводы.\n",
    "\n",
    "Для выполнения проекта применять *BERT* необязательно, но вы можете попробовать.\n",
    "\n",
    "**Описание данных**\n",
    "\n",
    "Данные находятся в файле `toxic_comments.csv`. Столбец *text* в нём содержит текст комментария, а *toxic* — целевой признак."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "toc": true
   },
   "source": [
    "<h1>Содержание<span class=\"tocSkip\"></span></h1>\n",
    "<div class=\"toc\"><ul class=\"toc-item\"><li><span><a href=\"#Подготовка\" data-toc-modified-id=\"Подготовка-1\"><span class=\"toc-item-num\">1&nbsp;&nbsp;</span>Подготовка</a></span><ul class=\"toc-item\"><li><span><a href=\"#Подготовка-тетради\" data-toc-modified-id=\"Подготовка-тетради-1.1\"><span class=\"toc-item-num\">1.1&nbsp;&nbsp;</span>Подготовка тетради</a></span></li><li><span><a href=\"#Предварительный-анализ-данных\" data-toc-modified-id=\"Предварительный-анализ-данных-1.2\"><span class=\"toc-item-num\">1.2&nbsp;&nbsp;</span>Предварительный анализ данных</a></span></li><li><span><a href=\"#Предобработка-данных\" data-toc-modified-id=\"Предобработка-данных-1.3\"><span class=\"toc-item-num\">1.3&nbsp;&nbsp;</span>Предобработка данных</a></span></li></ul></li><li><span><a href=\"#Обучение\" data-toc-modified-id=\"Обучение-2\"><span class=\"toc-item-num\">2&nbsp;&nbsp;</span>Обучение</a></span><ul class=\"toc-item\"><li><span><a href=\"#Разделение-датафрейма-на-выборки\" data-toc-modified-id=\"Разделение-датафрейма-на-выборки-2.1\"><span class=\"toc-item-num\">2.1&nbsp;&nbsp;</span>Разделение датафрейма на выборки</a></span></li><li><span><a href=\"#Полезные-функции\" data-toc-modified-id=\"Полезные-функции-2.2\"><span class=\"toc-item-num\">2.2&nbsp;&nbsp;</span>Полезные функции</a></span></li><li><span><a href=\"#Процесс-обучения\" data-toc-modified-id=\"Процесс-обучения-2.3\"><span class=\"toc-item-num\">2.3&nbsp;&nbsp;</span>Процесс обучения</a></span></li><li><span><a href=\"#Выбор-лучшей-модели\" data-toc-modified-id=\"Выбор-лучшей-модели-2.4\"><span class=\"toc-item-num\">2.4&nbsp;&nbsp;</span>Выбор лучшей модели</a></span></li><li><span><a href=\"#Тестирование-лучшей-модели\" data-toc-modified-id=\"Тестирование-лучшей-модели-2.5\"><span class=\"toc-item-num\">2.5&nbsp;&nbsp;</span>Тестирование лучшей модели</a></span></li></ul></li><li><span><a href=\"#Выводы\" data-toc-modified-id=\"Выводы-3\"><span class=\"toc-item-num\">3&nbsp;&nbsp;</span>Выводы</a></span></li><li><span><a href=\"#Чек-лист-проверки\" data-toc-modified-id=\"Чек-лист-проверки-4\"><span class=\"toc-item-num\">4&nbsp;&nbsp;</span>Чек-лист проверки</a></span></li></ul></div>"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Подготовка"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Подготовка тетради"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Requirement already satisfied: imblearn in /opt/conda/lib/python3.9/site-packages (0.0)\n",
      "Requirement already satisfied: imbalanced-learn in /opt/conda/lib/python3.9/site-packages (from imblearn) (0.11.0)\n",
      "Requirement already satisfied: joblib>=1.1.1 in /opt/conda/lib/python3.9/site-packages (from imbalanced-learn->imblearn) (1.3.2)\n",
      "Requirement already satisfied: threadpoolctl>=2.0.0 in /opt/conda/lib/python3.9/site-packages (from imbalanced-learn->imblearn) (3.1.0)\n",
      "Requirement already satisfied: scikit-learn>=1.0.2 in /opt/conda/lib/python3.9/site-packages (from imbalanced-learn->imblearn) (1.3.0)\n",
      "Requirement already satisfied: numpy>=1.17.3 in /opt/conda/lib/python3.9/site-packages (from imbalanced-learn->imblearn) (1.21.1)\n",
      "Requirement already satisfied: scipy>=1.5.0 in /opt/conda/lib/python3.9/site-packages (from imbalanced-learn->imblearn) (1.9.1)\n"
     ]
    }
   ],
   "source": [
    "import numpy as np\n",
    "import pandas as pd\n",
    "import time # Оценка времени выполнения кода\n",
    "import os # Загрузка датафрейма\n",
    "\n",
    "# BERT\n",
    "import torch\n",
    "import transformers\n",
    "from tqdm import notebook\n",
    "\n",
    "# Работа с датафреймом\n",
    "from sklearn.model_selection import(\n",
    "    cross_val_score, \n",
    "    train_test_split \n",
    ") \n",
    "\n",
    "# Предобработка данных\n",
    "from sklearn.preprocessing import(\n",
    "    StandardScaler # стандартизация\n",
    "    #MaxAbsScaler, # стандартизация по максимальному абсолютном значению в пределах 0-1\n",
    "    #normalize # нормализация значений аттрибутов\n",
    ") \n",
    "\n",
    "# Автоматизация раздельного декодирования признаков\n",
    "from sklearn.compose import(\n",
    "    #make_column_selector, \n",
    "    #make_column_transformer, \n",
    "    ColumnTransformer\n",
    ")\n",
    "\n",
    "# Pipeline (пайплайн)\n",
    "!pip install imblearn\n",
    "#!pip install -U imblearn\n",
    "#!pip install -U imbalanced-learn\n",
    "#conda install -c conda-forge imbalanced-learn\n",
    "#conda install -c glemaitre imbalanced-learn\n",
    "from imblearn.pipeline import Pipeline # Более предпочтительнее для TfidfVectorizer\n",
    "from imblearn.over_sampling import SMOTE # Балансировка классов в Pipeline\n",
    "#from sklearn.pipeline import make_pipeline # Pipeline с автоматическим названием шагов.\n",
    "# Функция для поддержки экспериментальной функции HavingGridSearchSV\n",
    "from sklearn.experimental import enable_halving_search_cv\n",
    "# Ускоренная автоматизация поиска лучших моделей и их параметров\n",
    "from sklearn.model_selection import HalvingGridSearchCV\n",
    "# Ускоренная автоматизация рандомного поиска лучших моделей и их параметров\n",
    "#from sklearn.model_selection import HalvingRandomSearchCV\n",
    "\n",
    "# Модели\n",
    "from sklearn.linear_model import LogisticRegression\n",
    "from sklearn.naive_bayes import ComplementNB # Улучшенный классификатор для не сбалансированных классов\n",
    "from catboost import CatBoostClassifier # CatBoost (Яндекс). Классификация\n",
    "\n",
    "# Метрики\n",
    "from sklearn.metrics import f1_score # F1 - среднегармоническое между precision_score и recall_score\n",
    "\n",
    "# Визуализация графиков\n",
    "import seaborn as sns\n",
    "import matplotlib\n",
    "%matplotlib inline\n",
    "from matplotlib import pyplot as plt\n",
    "from matplotlib import rcParams, rcParamsDefault\n",
    "from pandas.plotting import scatter_matrix\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Отображение всех столбцов таблицы\n",
    "pd.set_option('display.max_columns', None)\n",
    "# Обязательно для нормального отображения графиков plt\n",
    "rcParams['figure.figsize'] = 10, 6\n",
    "%config InlineBackend.figure_format = 'svg'\n",
    "# Дополнительно и не обязательно для декорирования графиков\n",
    "factor = .8\n",
    "default_dpi = rcParamsDefault['figure.dpi']\n",
    "rcParams['figure.dpi'] = default_dpi * factor\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [],
   "source": [
    "STATE = 42"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Предварительный анализ данных"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Загрузка данных\n",
    "if os.path.exists('datasets/toxic_comments.csv'):\n",
    "    data = pd.read_csv('toxic_comments.csv')\n",
    "elif os.path.exists('/datasets/toxic_comments.csv'):\n",
    "    data = pd.read_csv('/datasets/toxic_comments.csv')\n",
    "else:\n",
    "    print('Файл не найден')\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'pandas.core.frame.DataFrame'>\n",
      "RangeIndex: 159292 entries, 0 to 159291\n",
      "Data columns (total 3 columns):\n",
      " #   Column      Non-Null Count   Dtype \n",
      "---  ------      --------------   ----- \n",
      " 0   Unnamed: 0  159292 non-null  int64 \n",
      " 1   text        159292 non-null  object\n",
      " 2   toxic       159292 non-null  int64 \n",
      "dtypes: int64(2), object(1)\n",
      "memory usage: 3.6+ MB\n",
      "None\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Unnamed: 0</th>\n",
       "      <th>text</th>\n",
       "      <th>toxic</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>55251</th>\n",
       "      <td>55312</td>\n",
       "      <td>\"\\nAre you saying that I sir, am no gentleman?...</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>99206</th>\n",
       "      <td>99302</td>\n",
       "      <td>Ok, I do apologise for my slight outburst abov...</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>51491</th>\n",
       "      <td>51548</td>\n",
       "      <td>Eh, I think it's just going to look stupid as ...</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>53230</th>\n",
       "      <td>53291</td>\n",
       "      <td>References to the E line\\nwhat are all these r...</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>46732</th>\n",
       "      <td>46787</td>\n",
       "      <td>\"\\nFastfission, I welcome your thoughts on the...</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>126954</th>\n",
       "      <td>127085</td>\n",
       "      <td>Brasília \\nPlease be careful not to remove con...</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>149991</th>\n",
       "      <td>150147</td>\n",
       "      <td>\"\\nOh yes, you should ask him again. He copy-e...</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>99692</th>\n",
       "      <td>99789</td>\n",
       "      <td>All-Soviet Peace Conference\\nTo nominate for d...</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>84387</th>\n",
       "      <td>84468</td>\n",
       "      <td>You don't know if it's a fraud or not. Let's a...</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>55999</th>\n",
       "      <td>56060</td>\n",
       "      <td>There does not seem to be a cohesive entity ca...</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "        Unnamed: 0                                               text  toxic\n",
       "55251        55312  \"\\nAre you saying that I sir, am no gentleman?...      0\n",
       "99206        99302  Ok, I do apologise for my slight outburst abov...      0\n",
       "51491        51548  Eh, I think it's just going to look stupid as ...      0\n",
       "53230        53291  References to the E line\\nwhat are all these r...      0\n",
       "46732        46787  \"\\nFastfission, I welcome your thoughts on the...      0\n",
       "126954      127085  Brasília \\nPlease be careful not to remove con...      0\n",
       "149991      150147  \"\\nOh yes, you should ask him again. He copy-e...      0\n",
       "99692        99789  All-Soviet Peace Conference\\nTo nominate for d...      0\n",
       "84387        84468  You don't know if it's a fraud or not. Let's a...      0\n",
       "55999        56060  There does not seem to be a cohesive entity ca...      0"
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Анализ датафрейма\n",
    "print(data.info())\n",
    "data.sample(n=10)\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([0, 1])"
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Анализ уникальных значений \n",
    "# категориального признака \"text\"\n",
    "data.toxic.unique()\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/svg+xml": [
       "<?xml version=\"1.0\" encoding=\"utf-8\" standalone=\"no\"?>\n",
       "<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\"\n",
       "  \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\">\n",
       "<!-- Created with matplotlib (https://matplotlib.org/) -->\n",
       "<svg height=\"357.238125pt\" version=\"1.1\" viewBox=\"0 0 617.575 357.238125\" width=\"617.575pt\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n",
       " <metadata>\n",
       "  <rdf:RDF xmlns:cc=\"http://creativecommons.org/ns#\" xmlns:dc=\"http://purl.org/dc/elements/1.1/\" xmlns:rdf=\"http://www.w3.org/1999/02/22-rdf-syntax-ns#\">\n",
       "   <cc:Work>\n",
       "    <dc:type rdf:resource=\"http://purl.org/dc/dcmitype/StillImage\"/>\n",
       "    <dc:date>2023-09-17T16:58:26.296146</dc:date>\n",
       "    <dc:format>image/svg+xml</dc:format>\n",
       "    <dc:creator>\n",
       "     <cc:Agent>\n",
       "      <dc:title>Matplotlib v3.3.4, https://matplotlib.org/</dc:title>\n",
       "     </cc:Agent>\n",
       "    </dc:creator>\n",
       "   </cc:Work>\n",
       "  </rdf:RDF>\n",
       " </metadata>\n",
       " <defs>\n",
       "  <style type=\"text/css\">*{stroke-linecap:butt;stroke-linejoin:round;}</style>\n",
       " </defs>\n",
       " <g id=\"figure_1\">\n",
       "  <g id=\"patch_1\">\n",
       "   <path d=\"M 0 357.238125 \n",
       "L 617.575 357.238125 \n",
       "L 617.575 0 \n",
       "L 0 0 \n",
       "z\n",
       "\" style=\"fill:none;\"/>\n",
       "  </g>\n",
       "  <g id=\"axes_1\">\n",
       "   <g id=\"patch_2\">\n",
       "    <path d=\"M 52.375 333.36 \n",
       "L 610.375 333.36 \n",
       "L 610.375 7.2 \n",
       "L 52.375 7.2 \n",
       "z\n",
       "\" style=\"fill:#ffffff;\"/>\n",
       "   </g>\n",
       "   <g id=\"patch_3\">\n",
       "    <path clip-path=\"url(#p301bd050ad)\" d=\"M 77.738636 333.36 \n",
       "L 128.465909 333.36 \n",
       "L 128.465909 22.731429 \n",
       "L 77.738636 22.731429 \n",
       "z\n",
       "\" style=\"fill:#1f77b4;\"/>\n",
       "   </g>\n",
       "   <g id=\"patch_4\">\n",
       "    <path clip-path=\"url(#p301bd050ad)\" d=\"M 128.465909 333.36 \n",
       "L 179.193182 333.36 \n",
       "L 179.193182 333.36 \n",
       "L 128.465909 333.36 \n",
       "z\n",
       "\" style=\"fill:#1f77b4;\"/>\n",
       "   </g>\n",
       "   <g id=\"patch_5\">\n",
       "    <path clip-path=\"url(#p301bd050ad)\" d=\"M 179.193182 333.36 \n",
       "L 229.920455 333.36 \n",
       "L 229.920455 333.36 \n",
       "L 179.193182 333.36 \n",
       "z\n",
       "\" style=\"fill:#1f77b4;\"/>\n",
       "   </g>\n",
       "   <g id=\"patch_6\">\n",
       "    <path clip-path=\"url(#p301bd050ad)\" d=\"M 229.920455 333.36 \n",
       "L 280.647727 333.36 \n",
       "L 280.647727 333.36 \n",
       "L 229.920455 333.36 \n",
       "z\n",
       "\" style=\"fill:#1f77b4;\"/>\n",
       "   </g>\n",
       "   <g id=\"patch_7\">\n",
       "    <path clip-path=\"url(#p301bd050ad)\" d=\"M 280.647727 333.36 \n",
       "L 331.375 333.36 \n",
       "L 331.375 333.36 \n",
       "L 280.647727 333.36 \n",
       "z\n",
       "\" style=\"fill:#1f77b4;\"/>\n",
       "   </g>\n",
       "   <g id=\"patch_8\">\n",
       "    <path clip-path=\"url(#p301bd050ad)\" d=\"M 331.375 333.36 \n",
       "L 382.102273 333.36 \n",
       "L 382.102273 333.36 \n",
       "L 331.375 333.36 \n",
       "z\n",
       "\" style=\"fill:#1f77b4;\"/>\n",
       "   </g>\n",
       "   <g id=\"patch_9\">\n",
       "    <path clip-path=\"url(#p301bd050ad)\" d=\"M 382.102273 333.36 \n",
       "L 432.829545 333.36 \n",
       "L 432.829545 333.36 \n",
       "L 382.102273 333.36 \n",
       "z\n",
       "\" style=\"fill:#1f77b4;\"/>\n",
       "   </g>\n",
       "   <g id=\"patch_10\">\n",
       "    <path clip-path=\"url(#p301bd050ad)\" d=\"M 432.829545 333.36 \n",
       "L 483.556818 333.36 \n",
       "L 483.556818 333.36 \n",
       "L 432.829545 333.36 \n",
       "z\n",
       "\" style=\"fill:#1f77b4;\"/>\n",
       "   </g>\n",
       "   <g id=\"patch_11\">\n",
       "    <path clip-path=\"url(#p301bd050ad)\" d=\"M 483.556818 333.36 \n",
       "L 534.284091 333.36 \n",
       "L 534.284091 333.36 \n",
       "L 483.556818 333.36 \n",
       "z\n",
       "\" style=\"fill:#1f77b4;\"/>\n",
       "   </g>\n",
       "   <g id=\"patch_12\">\n",
       "    <path clip-path=\"url(#p301bd050ad)\" d=\"M 534.284091 333.36 \n",
       "L 585.011364 333.36 \n",
       "L 585.011364 298.226364 \n",
       "L 534.284091 298.226364 \n",
       "z\n",
       "\" style=\"fill:#1f77b4;\"/>\n",
       "   </g>\n",
       "   <g id=\"matplotlib.axis_1\">\n",
       "    <g id=\"xtick_1\">\n",
       "     <g id=\"line2d_1\">\n",
       "      <path clip-path=\"url(#p301bd050ad)\" d=\"M 77.738636 333.36 \n",
       "L 77.738636 7.2 \n",
       "\" style=\"fill:none;stroke:#b0b0b0;stroke-linecap:square;stroke-width:0.8;\"/>\n",
       "     </g>\n",
       "     <g id=\"line2d_2\">\n",
       "      <defs>\n",
       "       <path d=\"M 0 0 \n",
       "L 0 3.5 \n",
       "\" id=\"mfcd8adbec3\" style=\"stroke:#000000;stroke-width:0.8;\"/>\n",
       "      </defs>\n",
       "      <g>\n",
       "       <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"77.738636\" xlink:href=\"#mfcd8adbec3\" y=\"333.36\"/>\n",
       "      </g>\n",
       "     </g>\n",
       "     <g id=\"text_1\">\n",
       "      <!-- 0.0 -->\n",
       "      <g transform=\"translate(69.787074 347.958438)scale(0.1 -0.1)\">\n",
       "       <defs>\n",
       "        <path d=\"M 31.78125 66.40625 \n",
       "Q 24.171875 66.40625 20.328125 58.90625 \n",
       "Q 16.5 51.421875 16.5 36.375 \n",
       "Q 16.5 21.390625 20.328125 13.890625 \n",
       "Q 24.171875 6.390625 31.78125 6.390625 \n",
       "Q 39.453125 6.390625 43.28125 13.890625 \n",
       "Q 47.125 21.390625 47.125 36.375 \n",
       "Q 47.125 51.421875 43.28125 58.90625 \n",
       "Q 39.453125 66.40625 31.78125 66.40625 \n",
       "z\n",
       "M 31.78125 74.21875 \n",
       "Q 44.046875 74.21875 50.515625 64.515625 \n",
       "Q 56.984375 54.828125 56.984375 36.375 \n",
       "Q 56.984375 17.96875 50.515625 8.265625 \n",
       "Q 44.046875 -1.421875 31.78125 -1.421875 \n",
       "Q 19.53125 -1.421875 13.0625 8.265625 \n",
       "Q 6.59375 17.96875 6.59375 36.375 \n",
       "Q 6.59375 54.828125 13.0625 64.515625 \n",
       "Q 19.53125 74.21875 31.78125 74.21875 \n",
       "z\n",
       "\" id=\"DejaVuSans-48\"/>\n",
       "        <path d=\"M 10.6875 12.40625 \n",
       "L 21 12.40625 \n",
       "L 21 0 \n",
       "L 10.6875 0 \n",
       "z\n",
       "\" id=\"DejaVuSans-46\"/>\n",
       "       </defs>\n",
       "       <use xlink:href=\"#DejaVuSans-48\"/>\n",
       "       <use x=\"63.623047\" xlink:href=\"#DejaVuSans-46\"/>\n",
       "       <use x=\"95.410156\" xlink:href=\"#DejaVuSans-48\"/>\n",
       "      </g>\n",
       "     </g>\n",
       "    </g>\n",
       "    <g id=\"xtick_2\">\n",
       "     <g id=\"line2d_3\">\n",
       "      <path clip-path=\"url(#p301bd050ad)\" d=\"M 179.193182 333.36 \n",
       "L 179.193182 7.2 \n",
       "\" style=\"fill:none;stroke:#b0b0b0;stroke-linecap:square;stroke-width:0.8;\"/>\n",
       "     </g>\n",
       "     <g id=\"line2d_4\">\n",
       "      <g>\n",
       "       <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"179.193182\" xlink:href=\"#mfcd8adbec3\" y=\"333.36\"/>\n",
       "      </g>\n",
       "     </g>\n",
       "     <g id=\"text_2\">\n",
       "      <!-- 0.2 -->\n",
       "      <g transform=\"translate(171.241619 347.958438)scale(0.1 -0.1)\">\n",
       "       <defs>\n",
       "        <path d=\"M 19.1875 8.296875 \n",
       "L 53.609375 8.296875 \n",
       "L 53.609375 0 \n",
       "L 7.328125 0 \n",
       "L 7.328125 8.296875 \n",
       "Q 12.9375 14.109375 22.625 23.890625 \n",
       "Q 32.328125 33.6875 34.8125 36.53125 \n",
       "Q 39.546875 41.84375 41.421875 45.53125 \n",
       "Q 43.3125 49.21875 43.3125 52.78125 \n",
       "Q 43.3125 58.59375 39.234375 62.25 \n",
       "Q 35.15625 65.921875 28.609375 65.921875 \n",
       "Q 23.96875 65.921875 18.8125 64.3125 \n",
       "Q 13.671875 62.703125 7.8125 59.421875 \n",
       "L 7.8125 69.390625 \n",
       "Q 13.765625 71.78125 18.9375 73 \n",
       "Q 24.125 74.21875 28.421875 74.21875 \n",
       "Q 39.75 74.21875 46.484375 68.546875 \n",
       "Q 53.21875 62.890625 53.21875 53.421875 \n",
       "Q 53.21875 48.921875 51.53125 44.890625 \n",
       "Q 49.859375 40.875 45.40625 35.40625 \n",
       "Q 44.1875 33.984375 37.640625 27.21875 \n",
       "Q 31.109375 20.453125 19.1875 8.296875 \n",
       "z\n",
       "\" id=\"DejaVuSans-50\"/>\n",
       "       </defs>\n",
       "       <use xlink:href=\"#DejaVuSans-48\"/>\n",
       "       <use x=\"63.623047\" xlink:href=\"#DejaVuSans-46\"/>\n",
       "       <use x=\"95.410156\" xlink:href=\"#DejaVuSans-50\"/>\n",
       "      </g>\n",
       "     </g>\n",
       "    </g>\n",
       "    <g id=\"xtick_3\">\n",
       "     <g id=\"line2d_5\">\n",
       "      <path clip-path=\"url(#p301bd050ad)\" d=\"M 280.647727 333.36 \n",
       "L 280.647727 7.2 \n",
       "\" style=\"fill:none;stroke:#b0b0b0;stroke-linecap:square;stroke-width:0.8;\"/>\n",
       "     </g>\n",
       "     <g id=\"line2d_6\">\n",
       "      <g>\n",
       "       <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"280.647727\" xlink:href=\"#mfcd8adbec3\" y=\"333.36\"/>\n",
       "      </g>\n",
       "     </g>\n",
       "     <g id=\"text_3\">\n",
       "      <!-- 0.4 -->\n",
       "      <g transform=\"translate(272.696165 347.958438)scale(0.1 -0.1)\">\n",
       "       <defs>\n",
       "        <path d=\"M 37.796875 64.3125 \n",
       "L 12.890625 25.390625 \n",
       "L 37.796875 25.390625 \n",
       "z\n",
       "M 35.203125 72.90625 \n",
       "L 47.609375 72.90625 \n",
       "L 47.609375 25.390625 \n",
       "L 58.015625 25.390625 \n",
       "L 58.015625 17.1875 \n",
       "L 47.609375 17.1875 \n",
       "L 47.609375 0 \n",
       "L 37.796875 0 \n",
       "L 37.796875 17.1875 \n",
       "L 4.890625 17.1875 \n",
       "L 4.890625 26.703125 \n",
       "z\n",
       "\" id=\"DejaVuSans-52\"/>\n",
       "       </defs>\n",
       "       <use xlink:href=\"#DejaVuSans-48\"/>\n",
       "       <use x=\"63.623047\" xlink:href=\"#DejaVuSans-46\"/>\n",
       "       <use x=\"95.410156\" xlink:href=\"#DejaVuSans-52\"/>\n",
       "      </g>\n",
       "     </g>\n",
       "    </g>\n",
       "    <g id=\"xtick_4\">\n",
       "     <g id=\"line2d_7\">\n",
       "      <path clip-path=\"url(#p301bd050ad)\" d=\"M 382.102273 333.36 \n",
       "L 382.102273 7.2 \n",
       "\" style=\"fill:none;stroke:#b0b0b0;stroke-linecap:square;stroke-width:0.8;\"/>\n",
       "     </g>\n",
       "     <g id=\"line2d_8\">\n",
       "      <g>\n",
       "       <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"382.102273\" xlink:href=\"#mfcd8adbec3\" y=\"333.36\"/>\n",
       "      </g>\n",
       "     </g>\n",
       "     <g id=\"text_4\">\n",
       "      <!-- 0.6 -->\n",
       "      <g transform=\"translate(374.15071 347.958438)scale(0.1 -0.1)\">\n",
       "       <defs>\n",
       "        <path d=\"M 33.015625 40.375 \n",
       "Q 26.375 40.375 22.484375 35.828125 \n",
       "Q 18.609375 31.296875 18.609375 23.390625 \n",
       "Q 18.609375 15.53125 22.484375 10.953125 \n",
       "Q 26.375 6.390625 33.015625 6.390625 \n",
       "Q 39.65625 6.390625 43.53125 10.953125 \n",
       "Q 47.40625 15.53125 47.40625 23.390625 \n",
       "Q 47.40625 31.296875 43.53125 35.828125 \n",
       "Q 39.65625 40.375 33.015625 40.375 \n",
       "z\n",
       "M 52.59375 71.296875 \n",
       "L 52.59375 62.3125 \n",
       "Q 48.875 64.0625 45.09375 64.984375 \n",
       "Q 41.3125 65.921875 37.59375 65.921875 \n",
       "Q 27.828125 65.921875 22.671875 59.328125 \n",
       "Q 17.53125 52.734375 16.796875 39.40625 \n",
       "Q 19.671875 43.65625 24.015625 45.921875 \n",
       "Q 28.375 48.1875 33.59375 48.1875 \n",
       "Q 44.578125 48.1875 50.953125 41.515625 \n",
       "Q 57.328125 34.859375 57.328125 23.390625 \n",
       "Q 57.328125 12.15625 50.6875 5.359375 \n",
       "Q 44.046875 -1.421875 33.015625 -1.421875 \n",
       "Q 20.359375 -1.421875 13.671875 8.265625 \n",
       "Q 6.984375 17.96875 6.984375 36.375 \n",
       "Q 6.984375 53.65625 15.1875 63.9375 \n",
       "Q 23.390625 74.21875 37.203125 74.21875 \n",
       "Q 40.921875 74.21875 44.703125 73.484375 \n",
       "Q 48.484375 72.75 52.59375 71.296875 \n",
       "z\n",
       "\" id=\"DejaVuSans-54\"/>\n",
       "       </defs>\n",
       "       <use xlink:href=\"#DejaVuSans-48\"/>\n",
       "       <use x=\"63.623047\" xlink:href=\"#DejaVuSans-46\"/>\n",
       "       <use x=\"95.410156\" xlink:href=\"#DejaVuSans-54\"/>\n",
       "      </g>\n",
       "     </g>\n",
       "    </g>\n",
       "    <g id=\"xtick_5\">\n",
       "     <g id=\"line2d_9\">\n",
       "      <path clip-path=\"url(#p301bd050ad)\" d=\"M 483.556818 333.36 \n",
       "L 483.556818 7.2 \n",
       "\" style=\"fill:none;stroke:#b0b0b0;stroke-linecap:square;stroke-width:0.8;\"/>\n",
       "     </g>\n",
       "     <g id=\"line2d_10\">\n",
       "      <g>\n",
       "       <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"483.556818\" xlink:href=\"#mfcd8adbec3\" y=\"333.36\"/>\n",
       "      </g>\n",
       "     </g>\n",
       "     <g id=\"text_5\">\n",
       "      <!-- 0.8 -->\n",
       "      <g transform=\"translate(475.605256 347.958438)scale(0.1 -0.1)\">\n",
       "       <defs>\n",
       "        <path d=\"M 31.78125 34.625 \n",
       "Q 24.75 34.625 20.71875 30.859375 \n",
       "Q 16.703125 27.09375 16.703125 20.515625 \n",
       "Q 16.703125 13.921875 20.71875 10.15625 \n",
       "Q 24.75 6.390625 31.78125 6.390625 \n",
       "Q 38.8125 6.390625 42.859375 10.171875 \n",
       "Q 46.921875 13.96875 46.921875 20.515625 \n",
       "Q 46.921875 27.09375 42.890625 30.859375 \n",
       "Q 38.875 34.625 31.78125 34.625 \n",
       "z\n",
       "M 21.921875 38.8125 \n",
       "Q 15.578125 40.375 12.03125 44.71875 \n",
       "Q 8.5 49.078125 8.5 55.328125 \n",
       "Q 8.5 64.0625 14.71875 69.140625 \n",
       "Q 20.953125 74.21875 31.78125 74.21875 \n",
       "Q 42.671875 74.21875 48.875 69.140625 \n",
       "Q 55.078125 64.0625 55.078125 55.328125 \n",
       "Q 55.078125 49.078125 51.53125 44.71875 \n",
       "Q 48 40.375 41.703125 38.8125 \n",
       "Q 48.828125 37.15625 52.796875 32.3125 \n",
       "Q 56.78125 27.484375 56.78125 20.515625 \n",
       "Q 56.78125 9.90625 50.3125 4.234375 \n",
       "Q 43.84375 -1.421875 31.78125 -1.421875 \n",
       "Q 19.734375 -1.421875 13.25 4.234375 \n",
       "Q 6.78125 9.90625 6.78125 20.515625 \n",
       "Q 6.78125 27.484375 10.78125 32.3125 \n",
       "Q 14.796875 37.15625 21.921875 38.8125 \n",
       "z\n",
       "M 18.3125 54.390625 \n",
       "Q 18.3125 48.734375 21.84375 45.5625 \n",
       "Q 25.390625 42.390625 31.78125 42.390625 \n",
       "Q 38.140625 42.390625 41.71875 45.5625 \n",
       "Q 45.3125 48.734375 45.3125 54.390625 \n",
       "Q 45.3125 60.0625 41.71875 63.234375 \n",
       "Q 38.140625 66.40625 31.78125 66.40625 \n",
       "Q 25.390625 66.40625 21.84375 63.234375 \n",
       "Q 18.3125 60.0625 18.3125 54.390625 \n",
       "z\n",
       "\" id=\"DejaVuSans-56\"/>\n",
       "       </defs>\n",
       "       <use xlink:href=\"#DejaVuSans-48\"/>\n",
       "       <use x=\"63.623047\" xlink:href=\"#DejaVuSans-46\"/>\n",
       "       <use x=\"95.410156\" xlink:href=\"#DejaVuSans-56\"/>\n",
       "      </g>\n",
       "     </g>\n",
       "    </g>\n",
       "    <g id=\"xtick_6\">\n",
       "     <g id=\"line2d_11\">\n",
       "      <path clip-path=\"url(#p301bd050ad)\" d=\"M 585.011364 333.36 \n",
       "L 585.011364 7.2 \n",
       "\" style=\"fill:none;stroke:#b0b0b0;stroke-linecap:square;stroke-width:0.8;\"/>\n",
       "     </g>\n",
       "     <g id=\"line2d_12\">\n",
       "      <g>\n",
       "       <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"585.011364\" xlink:href=\"#mfcd8adbec3\" y=\"333.36\"/>\n",
       "      </g>\n",
       "     </g>\n",
       "     <g id=\"text_6\">\n",
       "      <!-- 1.0 -->\n",
       "      <g transform=\"translate(577.059801 347.958438)scale(0.1 -0.1)\">\n",
       "       <defs>\n",
       "        <path d=\"M 12.40625 8.296875 \n",
       "L 28.515625 8.296875 \n",
       "L 28.515625 63.921875 \n",
       "L 10.984375 60.40625 \n",
       "L 10.984375 69.390625 \n",
       "L 28.421875 72.90625 \n",
       "L 38.28125 72.90625 \n",
       "L 38.28125 8.296875 \n",
       "L 54.390625 8.296875 \n",
       "L 54.390625 0 \n",
       "L 12.40625 0 \n",
       "z\n",
       "\" id=\"DejaVuSans-49\"/>\n",
       "       </defs>\n",
       "       <use xlink:href=\"#DejaVuSans-49\"/>\n",
       "       <use x=\"63.623047\" xlink:href=\"#DejaVuSans-46\"/>\n",
       "       <use x=\"95.410156\" xlink:href=\"#DejaVuSans-48\"/>\n",
       "      </g>\n",
       "     </g>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"matplotlib.axis_2\">\n",
       "    <g id=\"ytick_1\">\n",
       "     <g id=\"line2d_13\">\n",
       "      <path clip-path=\"url(#p301bd050ad)\" d=\"M 52.375 333.36 \n",
       "L 610.375 333.36 \n",
       "\" style=\"fill:none;stroke:#b0b0b0;stroke-linecap:square;stroke-width:0.8;\"/>\n",
       "     </g>\n",
       "     <g id=\"line2d_14\">\n",
       "      <defs>\n",
       "       <path d=\"M 0 0 \n",
       "L -3.5 0 \n",
       "\" id=\"mdb9b2dd12f\" style=\"stroke:#000000;stroke-width:0.8;\"/>\n",
       "      </defs>\n",
       "      <g>\n",
       "       <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"52.375\" xlink:href=\"#mdb9b2dd12f\" y=\"333.36\"/>\n",
       "      </g>\n",
       "     </g>\n",
       "     <g id=\"text_7\">\n",
       "      <!-- 0 -->\n",
       "      <g transform=\"translate(39.0125 337.159219)scale(0.1 -0.1)\">\n",
       "       <use xlink:href=\"#DejaVuSans-48\"/>\n",
       "      </g>\n",
       "     </g>\n",
       "    </g>\n",
       "    <g id=\"ytick_2\">\n",
       "     <g id=\"line2d_15\">\n",
       "      <path clip-path=\"url(#p301bd050ad)\" d=\"M 52.375 289.947624 \n",
       "L 610.375 289.947624 \n",
       "\" style=\"fill:none;stroke:#b0b0b0;stroke-linecap:square;stroke-width:0.8;\"/>\n",
       "     </g>\n",
       "     <g id=\"line2d_16\">\n",
       "      <g>\n",
       "       <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"52.375\" xlink:href=\"#mdb9b2dd12f\" y=\"289.947624\"/>\n",
       "      </g>\n",
       "     </g>\n",
       "     <g id=\"text_8\">\n",
       "      <!-- 20000 -->\n",
       "      <g transform=\"translate(13.5625 293.746843)scale(0.1 -0.1)\">\n",
       "       <use xlink:href=\"#DejaVuSans-50\"/>\n",
       "       <use x=\"63.623047\" xlink:href=\"#DejaVuSans-48\"/>\n",
       "       <use x=\"127.246094\" xlink:href=\"#DejaVuSans-48\"/>\n",
       "       <use x=\"190.869141\" xlink:href=\"#DejaVuSans-48\"/>\n",
       "       <use x=\"254.492188\" xlink:href=\"#DejaVuSans-48\"/>\n",
       "      </g>\n",
       "     </g>\n",
       "    </g>\n",
       "    <g id=\"ytick_3\">\n",
       "     <g id=\"line2d_17\">\n",
       "      <path clip-path=\"url(#p301bd050ad)\" d=\"M 52.375 246.535249 \n",
       "L 610.375 246.535249 \n",
       "\" style=\"fill:none;stroke:#b0b0b0;stroke-linecap:square;stroke-width:0.8;\"/>\n",
       "     </g>\n",
       "     <g id=\"line2d_18\">\n",
       "      <g>\n",
       "       <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"52.375\" xlink:href=\"#mdb9b2dd12f\" y=\"246.535249\"/>\n",
       "      </g>\n",
       "     </g>\n",
       "     <g id=\"text_9\">\n",
       "      <!-- 40000 -->\n",
       "      <g transform=\"translate(13.5625 250.334467)scale(0.1 -0.1)\">\n",
       "       <use xlink:href=\"#DejaVuSans-52\"/>\n",
       "       <use x=\"63.623047\" xlink:href=\"#DejaVuSans-48\"/>\n",
       "       <use x=\"127.246094\" xlink:href=\"#DejaVuSans-48\"/>\n",
       "       <use x=\"190.869141\" xlink:href=\"#DejaVuSans-48\"/>\n",
       "       <use x=\"254.492188\" xlink:href=\"#DejaVuSans-48\"/>\n",
       "      </g>\n",
       "     </g>\n",
       "    </g>\n",
       "    <g id=\"ytick_4\">\n",
       "     <g id=\"line2d_19\">\n",
       "      <path clip-path=\"url(#p301bd050ad)\" d=\"M 52.375 203.122873 \n",
       "L 610.375 203.122873 \n",
       "\" style=\"fill:none;stroke:#b0b0b0;stroke-linecap:square;stroke-width:0.8;\"/>\n",
       "     </g>\n",
       "     <g id=\"line2d_20\">\n",
       "      <g>\n",
       "       <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"52.375\" xlink:href=\"#mdb9b2dd12f\" y=\"203.122873\"/>\n",
       "      </g>\n",
       "     </g>\n",
       "     <g id=\"text_10\">\n",
       "      <!-- 60000 -->\n",
       "      <g transform=\"translate(13.5625 206.922092)scale(0.1 -0.1)\">\n",
       "       <use xlink:href=\"#DejaVuSans-54\"/>\n",
       "       <use x=\"63.623047\" xlink:href=\"#DejaVuSans-48\"/>\n",
       "       <use x=\"127.246094\" xlink:href=\"#DejaVuSans-48\"/>\n",
       "       <use x=\"190.869141\" xlink:href=\"#DejaVuSans-48\"/>\n",
       "       <use x=\"254.492188\" xlink:href=\"#DejaVuSans-48\"/>\n",
       "      </g>\n",
       "     </g>\n",
       "    </g>\n",
       "    <g id=\"ytick_5\">\n",
       "     <g id=\"line2d_21\">\n",
       "      <path clip-path=\"url(#p301bd050ad)\" d=\"M 52.375 159.710497 \n",
       "L 610.375 159.710497 \n",
       "\" style=\"fill:none;stroke:#b0b0b0;stroke-linecap:square;stroke-width:0.8;\"/>\n",
       "     </g>\n",
       "     <g id=\"line2d_22\">\n",
       "      <g>\n",
       "       <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"52.375\" xlink:href=\"#mdb9b2dd12f\" y=\"159.710497\"/>\n",
       "      </g>\n",
       "     </g>\n",
       "     <g id=\"text_11\">\n",
       "      <!-- 80000 -->\n",
       "      <g transform=\"translate(13.5625 163.509716)scale(0.1 -0.1)\">\n",
       "       <use xlink:href=\"#DejaVuSans-56\"/>\n",
       "       <use x=\"63.623047\" xlink:href=\"#DejaVuSans-48\"/>\n",
       "       <use x=\"127.246094\" xlink:href=\"#DejaVuSans-48\"/>\n",
       "       <use x=\"190.869141\" xlink:href=\"#DejaVuSans-48\"/>\n",
       "       <use x=\"254.492188\" xlink:href=\"#DejaVuSans-48\"/>\n",
       "      </g>\n",
       "     </g>\n",
       "    </g>\n",
       "    <g id=\"ytick_6\">\n",
       "     <g id=\"line2d_23\">\n",
       "      <path clip-path=\"url(#p301bd050ad)\" d=\"M 52.375 116.298122 \n",
       "L 610.375 116.298122 \n",
       "\" style=\"fill:none;stroke:#b0b0b0;stroke-linecap:square;stroke-width:0.8;\"/>\n",
       "     </g>\n",
       "     <g id=\"line2d_24\">\n",
       "      <g>\n",
       "       <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"52.375\" xlink:href=\"#mdb9b2dd12f\" y=\"116.298122\"/>\n",
       "      </g>\n",
       "     </g>\n",
       "     <g id=\"text_12\">\n",
       "      <!-- 100000 -->\n",
       "      <g transform=\"translate(7.2 120.097341)scale(0.1 -0.1)\">\n",
       "       <use xlink:href=\"#DejaVuSans-49\"/>\n",
       "       <use x=\"63.623047\" xlink:href=\"#DejaVuSans-48\"/>\n",
       "       <use x=\"127.246094\" xlink:href=\"#DejaVuSans-48\"/>\n",
       "       <use x=\"190.869141\" xlink:href=\"#DejaVuSans-48\"/>\n",
       "       <use x=\"254.492188\" xlink:href=\"#DejaVuSans-48\"/>\n",
       "       <use x=\"318.115234\" xlink:href=\"#DejaVuSans-48\"/>\n",
       "      </g>\n",
       "     </g>\n",
       "    </g>\n",
       "    <g id=\"ytick_7\">\n",
       "     <g id=\"line2d_25\">\n",
       "      <path clip-path=\"url(#p301bd050ad)\" d=\"M 52.375 72.885746 \n",
       "L 610.375 72.885746 \n",
       "\" style=\"fill:none;stroke:#b0b0b0;stroke-linecap:square;stroke-width:0.8;\"/>\n",
       "     </g>\n",
       "     <g id=\"line2d_26\">\n",
       "      <g>\n",
       "       <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"52.375\" xlink:href=\"#mdb9b2dd12f\" y=\"72.885746\"/>\n",
       "      </g>\n",
       "     </g>\n",
       "     <g id=\"text_13\">\n",
       "      <!-- 120000 -->\n",
       "      <g transform=\"translate(7.2 76.684965)scale(0.1 -0.1)\">\n",
       "       <use xlink:href=\"#DejaVuSans-49\"/>\n",
       "       <use x=\"63.623047\" xlink:href=\"#DejaVuSans-50\"/>\n",
       "       <use x=\"127.246094\" xlink:href=\"#DejaVuSans-48\"/>\n",
       "       <use x=\"190.869141\" xlink:href=\"#DejaVuSans-48\"/>\n",
       "       <use x=\"254.492188\" xlink:href=\"#DejaVuSans-48\"/>\n",
       "       <use x=\"318.115234\" xlink:href=\"#DejaVuSans-48\"/>\n",
       "      </g>\n",
       "     </g>\n",
       "    </g>\n",
       "    <g id=\"ytick_8\">\n",
       "     <g id=\"line2d_27\">\n",
       "      <path clip-path=\"url(#p301bd050ad)\" d=\"M 52.375 29.473371 \n",
       "L 610.375 29.473371 \n",
       "\" style=\"fill:none;stroke:#b0b0b0;stroke-linecap:square;stroke-width:0.8;\"/>\n",
       "     </g>\n",
       "     <g id=\"line2d_28\">\n",
       "      <g>\n",
       "       <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"52.375\" xlink:href=\"#mdb9b2dd12f\" y=\"29.473371\"/>\n",
       "      </g>\n",
       "     </g>\n",
       "     <g id=\"text_14\">\n",
       "      <!-- 140000 -->\n",
       "      <g transform=\"translate(7.2 33.272589)scale(0.1 -0.1)\">\n",
       "       <use xlink:href=\"#DejaVuSans-49\"/>\n",
       "       <use x=\"63.623047\" xlink:href=\"#DejaVuSans-52\"/>\n",
       "       <use x=\"127.246094\" xlink:href=\"#DejaVuSans-48\"/>\n",
       "       <use x=\"190.869141\" xlink:href=\"#DejaVuSans-48\"/>\n",
       "       <use x=\"254.492188\" xlink:href=\"#DejaVuSans-48\"/>\n",
       "       <use x=\"318.115234\" xlink:href=\"#DejaVuSans-48\"/>\n",
       "      </g>\n",
       "     </g>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"patch_13\">\n",
       "    <path d=\"M 52.375 333.36 \n",
       "L 52.375 7.2 \n",
       "\" style=\"fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;stroke-width:0.8;\"/>\n",
       "   </g>\n",
       "   <g id=\"patch_14\">\n",
       "    <path d=\"M 610.375 333.36 \n",
       "L 610.375 7.2 \n",
       "\" style=\"fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;stroke-width:0.8;\"/>\n",
       "   </g>\n",
       "   <g id=\"patch_15\">\n",
       "    <path d=\"M 52.375 333.36 \n",
       "L 610.375 333.36 \n",
       "\" style=\"fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;stroke-width:0.8;\"/>\n",
       "   </g>\n",
       "   <g id=\"patch_16\">\n",
       "    <path d=\"M 52.375 7.2 \n",
       "L 610.375 7.2 \n",
       "\" style=\"fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;stroke-width:0.8;\"/>\n",
       "   </g>\n",
       "  </g>\n",
       " </g>\n",
       " <defs>\n",
       "  <clipPath id=\"p301bd050ad\">\n",
       "   <rect height=\"326.16\" width=\"558\" x=\"52.375\" y=\"7.2\"/>\n",
       "  </clipPath>\n",
       " </defs>\n",
       "</svg>\n"
      ],
      "text/plain": [
       "<Figure size 800x480 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "# Анализ баланса классов\n",
    "# целевой переменной\n",
    "data['toxic'].hist(); \n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "**Вылов из предварительного анализа данных**\n",
    "1. Датафрейм содержит 159292 объекта без пропусков и 3 признака. Признак `text` содержит исходные тексты твитов, является не целевым и будет использован в обучении и предсказании. Признак `toxic` содержит данные по классификации текстов и явялется целевым.\n",
    "1. Признак `toxic` содержит только `0` и `1`, но, при этом, имеет тип данных `int64`. Его следует оптимизировать до `uint8`.\n",
    "1. Признак `toxic` является целевыми с не сбалансированными классами и многократным перевесом в пользу класса `0`. Этот файкт требуется учесть при делении датафрейма на обучающие и тестовые выборки.\n",
    "1. Признак `Unnamed: 0` не содержит ценной для обучения информации и не будет использован в дальнейшем анализе и обучении моделей.\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Предобработка данных"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Ограничение выборки для ускорения проверки кода\n",
    "# путем выбора n количества случайных объектов\n",
    "data = data.sample(n=500, random_state=STATE)\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Оптимизация данных\n",
    "data['toxic'] = data['toxic'].astype('uint8')\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Загрузка словаря модели BERT\n",
    "tokenizer = transformers.BertTokenizer(\n",
    "    vocab_file='/datasets/ds_bert/vocab.txt')\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Токенизация текстов твитов \n",
    "# с добавлением токенов начала и конца текста\n",
    "tokenized = data['text'].apply(\n",
    "    lambda x: tokenizer.encode(x, add_special_tokens=True))\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Максимальная длина токена: 1438\n"
     ]
    }
   ],
   "source": [
    "# Определение максимальной длины токена\n",
    "max_len = 0\n",
    "for i in tokenized.values:\n",
    "    if len(i) > max_len:\n",
    "        max_len = len(i)\n",
    "\n",
    "print('Максимальная длина токена:', max_len) \n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Приведение токенов к единой максимальной длине\n",
    "padded = np.array([i + [0]*(max_len - len(i)) for i in tokenized.values])\n",
    "# Уменьшение размерности токенов\n",
    "padded = padded[:, :512] \n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [],
   "source": [
    "# \"Маскировка\" нулями (пустота) и единицами (текст) токенов.\n",
    "attention_mask = np.where(padded != 0, 1, 0)\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "Some weights of the model checkpoint at /datasets/ds_bert/rubert_model.bin were not used when initializing BertModel: ['cls.predictions.bias', 'cls.predictions.decoder.weight', 'cls.predictions.transform.LayerNorm.weight', 'cls.predictions.transform.LayerNorm.bias', 'cls.predictions.transform.dense.bias', 'cls.predictions.transform.dense.weight', 'cls.predictions.decoder.bias', 'cls.seq_relationship.bias', 'cls.seq_relationship.weight']\n",
      "- This IS expected if you are initializing BertModel from the checkpoint of a model trained on another task or with another architecture (e.g. initializing a BertForSequenceClassification model from a BertForPreTraining model).\n",
      "- This IS NOT expected if you are initializing BertModel from the checkpoint of a model that you expect to be exactly identical (initializing a BertForSequenceClassification model from a BertForSequenceClassification model).\n"
     ]
    }
   ],
   "source": [
    "# Инициализация модели класса \"BertModel\",\n",
    "# паередача ей данных из файлов предобученной модели\n",
    "# и конфигурации\n",
    "config = transformers.BertConfig.from_json_file(\n",
    "    '/datasets/ds_bert/bert_config.json')\n",
    "model = transformers.BertModel.from_pretrained(\n",
    "    '/datasets/ds_bert/rubert_model.bin', config=config)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "48bc1ffc688d4329b62fb55a589c74a5",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "  0%|          | 0/250 [00:00<?, ?it/s]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "batch_size = 2\n",
    "embeddings = []\n",
    "for i in notebook.tqdm(range(padded.shape[0] // batch_size)):\n",
    "    batch = torch.LongTensor(padded[batch_size*i:batch_size*(i+1)])\n",
    "    attention_mask_batch = torch.LongTensor(attention_mask[batch_size*i:batch_size*(i+1)]) \n",
    "    \n",
    "    with torch.no_grad():\n",
    "        batch_embeddings = model(batch, attention_mask=attention_mask_batch) \n",
    "    \n",
    "    embeddings.append(batch_embeddings[0][:,0,:].numpy()) \n",
    "    "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Обучение"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Разделение датафрейма на выборки"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Разделение датафрейма \n",
    "# на целевые и не целевые выборки\n",
    "#features = data['text']\n",
    "features = np.concatenate(embeddings)\n",
    "target = data['toxic']\n",
    "\n",
    "# Разделение выборок \n",
    "# на обучающие и тестовые\n",
    "features_train, features_test, target_train, target_test = train_test_split(\n",
    "    features, \n",
    "    target, \n",
    "    test_size=.25, \n",
    "    stratify=target, \n",
    "    random_state=STATE\n",
    ") \n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Полезные функции"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Model + Params + Pipeline + HalvingGridSearchCV\n",
    "def model_pipeline_gridsearch(\n",
    "    features_train, \n",
    "    target_train, \n",
    "    model, \n",
    "    params, \n",
    "    data_grids, \n",
    "    data_times \n",
    "):\n",
    "    \n",
    "    # Начало отслеживания времени\n",
    "    start_time = time.time() \n",
    "    \n",
    "    # Pipeline\n",
    "    pipeline = Pipeline([\n",
    "        #('vect', ColumnTransformer([\n",
    "            #('tfidf', TfidfVectorizer(), 'corpus'), # векторизация текстов\n",
    "            #('std', StandardScaler(), features_train[['numbers_of_words', 'average_word_lenght']].columns) # (возвращает ошибку на всем объёме данных) стандартизация данны\n",
    "            #('stdm', MaxAbsScaler(), features_train[['numbers_of_words', 'average_word_lenght']].columns) # (возвращает ошибку на всем объёме данных) стандартизация данны\n",
    "            #('norm', normalize(), features_train[['numbers_of_words', 'average_word_lenght']].columns) \n",
    "        #], remainder='drop' # удаление исходного атрибута с текстами\n",
    "        #)), \n",
    "        ('sampl', SMOTE(random_state=STATE)), # сэмплирование данных (приведение классов в равновесие) за счет создания синтетических данных из минорного класса\n",
    "        ('clf', model) # модель классификации \n",
    "    ])\n",
    "    \n",
    "    # HalvingGridSearchCV\n",
    "    # (о подборе оптимальных параметров:\n",
    "    # https://scikit-learn.ru/3-2-tuning-the-hyper-parameters-of-an-estimator/)\n",
    "    #grid = HalvingRandomSearchCV(\n",
    "    grid = HalvingGridSearchCV(\n",
    "        pipeline, \n",
    "        params, \n",
    "        #resorce=\n",
    "        cv=4, # параметр KFold для кроссвалидации (обучющая и валидационная выборки 75:25)\n",
    "        n_jobs=-1, # количество параллельно выполняемых заданий (-1 - задействованы все процессоры)\n",
    "        scoring='f1', # функция ошибки\n",
    "        error_score='raise', #0 # в случае неполадки 'raise' - возвращает ошибку, int - возвращает FitFailedWarning\n",
    "        random_state=STATE\n",
    "    ) \n",
    "    \n",
    "    # Обучение\n",
    "    grid.fit(features_train, target_train)\n",
    "    \n",
    "    # Подсчет времени выполнения скрипта\n",
    "    finish_time = time.time()\n",
    "    funtion_time = finish_time - start_time\n",
    "    \n",
    "    data_grids.append(grid)\n",
    "    data_times.append(funtion_time) \n",
    "    \n",
    "    return data_grids, data_times\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Вывод на печать результатов модели\n",
    "def print_model_result(grids, data_times, model_name):\n",
    "    print('Модель    :', model_name)\n",
    "    print('Метрика F1:', grids[-1].best_score_)\n",
    "    print(f'Время     : {data_times[-1]} секунд')\n",
    "    print('Параметры :', grids[-1].best_estimator_[-1].get_params())\n",
    "    print()\n",
    "    print('-'*20)\n",
    "    print()\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Процесс обучения"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Поиск лучших моделей и их параметров\n",
    "data_grids = []\n",
    "data_times = []\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/opt/conda/lib/python3.9/site-packages/sklearn/linear_model/_logistic.py:460: ConvergenceWarning: lbfgs failed to converge (status=1):\n",
      "STOP: TOTAL NO. of ITERATIONS REACHED LIMIT.\n",
      "\n",
      "Increase the number of iterations (max_iter) or scale the data as shown in:\n",
      "    https://scikit-learn.org/stable/modules/preprocessing.html\n",
      "Please also refer to the documentation for alternative solver options:\n",
      "    https://scikit-learn.org/stable/modules/linear_model.html#logistic-regression\n",
      "  n_iter_i = _check_optimize_result(\n",
      "/opt/conda/lib/python3.9/site-packages/sklearn/linear_model/_logistic.py:460: ConvergenceWarning: lbfgs failed to converge (status=1):\n",
      "STOP: TOTAL NO. of ITERATIONS REACHED LIMIT.\n",
      "\n",
      "Increase the number of iterations (max_iter) or scale the data as shown in:\n",
      "    https://scikit-learn.org/stable/modules/preprocessing.html\n",
      "Please also refer to the documentation for alternative solver options:\n",
      "    https://scikit-learn.org/stable/modules/linear_model.html#logistic-regression\n",
      "  n_iter_i = _check_optimize_result(\n",
      "/opt/conda/lib/python3.9/site-packages/sklearn/linear_model/_logistic.py:460: ConvergenceWarning: lbfgs failed to converge (status=1):\n",
      "STOP: TOTAL NO. of ITERATIONS REACHED LIMIT.\n",
      "\n",
      "Increase the number of iterations (max_iter) or scale the data as shown in:\n",
      "    https://scikit-learn.org/stable/modules/preprocessing.html\n",
      "Please also refer to the documentation for alternative solver options:\n",
      "    https://scikit-learn.org/stable/modules/linear_model.html#logistic-regression\n",
      "  n_iter_i = _check_optimize_result(\n",
      "/opt/conda/lib/python3.9/site-packages/sklearn/linear_model/_logistic.py:460: ConvergenceWarning: lbfgs failed to converge (status=1):\n",
      "STOP: TOTAL NO. of ITERATIONS REACHED LIMIT.\n",
      "\n",
      "Increase the number of iterations (max_iter) or scale the data as shown in:\n",
      "    https://scikit-learn.org/stable/modules/preprocessing.html\n",
      "Please also refer to the documentation for alternative solver options:\n",
      "    https://scikit-learn.org/stable/modules/linear_model.html#logistic-regression\n",
      "  n_iter_i = _check_optimize_result(\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Модель    : LogisticRegression\n",
      "Метрика F1: 0.32591706539074955\n",
      "Время     : 8.158280372619629 секунд\n",
      "Параметры : {'C': 1.0, 'class_weight': None, 'dual': False, 'fit_intercept': True, 'intercept_scaling': 1, 'l1_ratio': None, 'max_iter': 100, 'multi_class': 'auto', 'n_jobs': None, 'penalty': 'l2', 'random_state': 42, 'solver': 'liblinear', 'tol': 0.0001, 'verbose': 0, 'warm_start': False}\n",
      "\n",
      "--------------------\n",
      "\n"
     ]
    }
   ],
   "source": [
    "# LogisticRegression\n",
    "params = [{\n",
    "    # Параметры модели\n",
    "    'clf__solver': ('liblinear', 'lbfgs') \n",
    "}]\n",
    "data_grids, data_times = model_pipeline_gridsearch(\n",
    "    features_train, \n",
    "    target_train, \n",
    "    LogisticRegression(\n",
    "        random_state=STATE\n",
    "    ), \n",
    "    params, \n",
    "    data_grids, \n",
    "    data_times \n",
    ")\n",
    "print_model_result(data_grids, data_times, 'LogisticRegression')\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Модель    : LogisticRegression\n",
      "Метрика F1: 0.32591706539074955\n",
      "Время     : 2.1511740684509277 секунд\n",
      "Параметры : {'C': 1.0, 'class_weight': None, 'dual': False, 'fit_intercept': True, 'intercept_scaling': 1, 'l1_ratio': None, 'max_iter': 100, 'multi_class': 'auto', 'n_jobs': None, 'penalty': 'l2', 'random_state': 42, 'solver': 'liblinear', 'tol': 0.0001, 'verbose': 0, 'warm_start': False}\n",
      "\n",
      "--------------------\n",
      "\n"
     ]
    }
   ],
   "source": [
    "# LogisticRegression\n",
    "best_solver = data_grids[-1].best_estimator_[-1].get_params()['solver'] \n",
    "params = [{\n",
    "    # Параметры модели\n",
    "    'clf__penalty': ('l1', 'l2'), #, None), \n",
    "}]\n",
    "data_grids, data_times = model_pipeline_gridsearch(\n",
    "    features_train, \n",
    "    target_train, \n",
    "    LogisticRegression(\n",
    "        random_state=STATE, \n",
    "        solver=best_solver\n",
    "    ), \n",
    "    params, \n",
    "    data_grids, \n",
    "    data_times \n",
    ")\n",
    "print_model_result(data_grids, data_times, 'LogisticRegression')\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Модель    : LogisticRegression\n",
      "Метрика F1: 0.32591706539074955\n",
      "Время     : 3.8035128116607666 секунд\n",
      "Параметры : {'C': 1.0, 'class_weight': None, 'dual': False, 'fit_intercept': True, 'intercept_scaling': 1, 'l1_ratio': None, 'max_iter': 100, 'multi_class': 'auto', 'n_jobs': None, 'penalty': 'l2', 'random_state': 42, 'solver': 'liblinear', 'tol': 0.0001, 'verbose': 0, 'warm_start': False}\n",
      "\n",
      "--------------------\n",
      "\n"
     ]
    }
   ],
   "source": [
    "# LogisticRegression\n",
    "best_penalty = data_grids[-1].best_estimator_[-1].get_params()['penalty'] \n",
    "params = [{\n",
    "    # Параметры модели\n",
    "    'clf__C': (.1, .5, 1.) \n",
    "}]\n",
    "data_grids, data_times = model_pipeline_gridsearch(\n",
    "    features_train, \n",
    "    target_train, \n",
    "    LogisticRegression(\n",
    "        random_state=STATE, \n",
    "        solver=best_solver, \n",
    "        penalty=best_penalty\n",
    "    ), \n",
    "    params, \n",
    "    data_grids, \n",
    "    data_times \n",
    ")\n",
    "print_model_result(data_grids, data_times, 'LogisticRegression')\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Модель    : CatBoostClassifier\n",
      "Метрика F1: 0.19453781512605045\n",
      "Время     : 1011.9996755123138 секунд\n",
      "Параметры : {'logging_level': 'Silent', 'random_state': 42}\n",
      "\n",
      "--------------------\n",
      "\n"
     ]
    }
   ],
   "source": [
    "# CatBoostClassifier (поиск learning_rate) \n",
    "params = [{\n",
    "    # Параметры модели\n",
    "    #'clf__learning_rate': (.01, .05, 1.) \n",
    "    #'clf__depth': (2, 4, 6, 8),\n",
    "    #'clf__n_estimators': (2, 5, 10, 20) \n",
    "}]\n",
    "data_grids, data_times = model_pipeline_gridsearch(\n",
    "    features_train, \n",
    "    target_train, \n",
    "    CatBoostClassifier(logging_level='Silent', random_state=STATE), \n",
    "    params, \n",
    "    data_grids, \n",
    "    data_times \n",
    ")\n",
    "print_model_result(data_grids, data_times, 'CatBoostClassifier')\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Выбор лучшей модели"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Лучшее время           : 8.158280372619629\n",
      "Лучший показатель F1   : 0.32591706539074955\n",
      "Лучшая модель          :\n",
      "HalvingGridSearchCV(cv=4, error_score='raise',\n",
      "                    estimator=Pipeline(steps=[('sampl', SMOTE(random_state=42)),\n",
      "                                              ('clf',\n",
      "                                               LogisticRegression(random_state=42))]),\n",
      "                    n_jobs=-1,\n",
      "                    param_grid=[{'clf__solver': ('liblinear', 'lbfgs')}],\n",
      "                    random_state=42, scoring='f1')\n",
      "Лучшие параметры модели:\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "{'aggressive_elimination': False,\n",
       " 'cv': 4,\n",
       " 'error_score': 'raise',\n",
       " 'estimator__memory': None,\n",
       " 'estimator__steps': [('sampl', SMOTE(random_state=42)),\n",
       "  ('clf', LogisticRegression(random_state=42))],\n",
       " 'estimator__verbose': False,\n",
       " 'estimator__sampl': SMOTE(random_state=42),\n",
       " 'estimator__clf': LogisticRegression(random_state=42),\n",
       " 'estimator__sampl__k_neighbors': 5,\n",
       " 'estimator__sampl__n_jobs': None,\n",
       " 'estimator__sampl__random_state': 42,\n",
       " 'estimator__sampl__sampling_strategy': 'auto',\n",
       " 'estimator__clf__C': 1.0,\n",
       " 'estimator__clf__class_weight': None,\n",
       " 'estimator__clf__dual': False,\n",
       " 'estimator__clf__fit_intercept': True,\n",
       " 'estimator__clf__intercept_scaling': 1,\n",
       " 'estimator__clf__l1_ratio': None,\n",
       " 'estimator__clf__max_iter': 100,\n",
       " 'estimator__clf__multi_class': 'auto',\n",
       " 'estimator__clf__n_jobs': None,\n",
       " 'estimator__clf__penalty': 'l2',\n",
       " 'estimator__clf__random_state': 42,\n",
       " 'estimator__clf__solver': 'lbfgs',\n",
       " 'estimator__clf__tol': 0.0001,\n",
       " 'estimator__clf__verbose': 0,\n",
       " 'estimator__clf__warm_start': False,\n",
       " 'estimator': Pipeline(steps=[('sampl', SMOTE(random_state=42)),\n",
       "                 ('clf', LogisticRegression(random_state=42))]),\n",
       " 'factor': 3,\n",
       " 'max_resources': 'auto',\n",
       " 'min_resources': 'exhaust',\n",
       " 'n_jobs': -1,\n",
       " 'param_grid': [{'clf__solver': ('liblinear', 'lbfgs')}],\n",
       " 'random_state': 42,\n",
       " 'refit': True,\n",
       " 'resource': 'n_samples',\n",
       " 'return_train_score': True,\n",
       " 'scoring': 'f1',\n",
       " 'verbose': 0}"
      ]
     },
     "execution_count": 25,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Лучшая модель из расчета F1\n",
    "data_grids_best = data_grids[0]\n",
    "data_times_best = data_times[0]\n",
    "n = 0\n",
    "for i in range(0, len(data_grids)):\n",
    "    if data_grids[i].best_score_ > data_grids_best.best_score_: \n",
    "    #if (data_grids[i].best_score_ < data_grids_best.best_score_) & (data_times[i] < data_times_best): \n",
    "        data_grids_best = data_grids[i]\n",
    "        data_times_best = data_times[i]\n",
    "\n",
    "print('Лучшее время           :', data_times_best)\n",
    "print('Лучший показатель F1   :', data_grids_best.best_score_)\n",
    "print('Лучшая модель          :') \n",
    "print(data_grids_best) \n",
    "print('Лучшие параметры модели:') \n",
    "data_grids_best.get_params()\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "**Выводы из выбора лучшей модели**\n",
    "`BERT` явялется мощным инструментом в технологии классификации текстов. Однако, он также является ресурсозатратным инструментом. Ресурсов, имеющихся у автора данной работы, хватило на обработку только 500 случайных объектов из 159292 имеющихся в датафрейме. По мнению автора данного проекта, такого количества объектов не хватило для полноценного обучения модели предсказания классов."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Тестирование лучшей модели"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Показатель F1     : 0.4\n",
      "Время предсказания: 0.01685309410095215 секунд\n"
     ]
    }
   ],
   "source": [
    "start_time = time.time()\n",
    "# Предсказание лучшей модели\n",
    "predict = data_grids_best.predict(features_test)\n",
    "finish_time = time.time()\n",
    "funtion_time = finish_time - start_time\n",
    "# Расчет F1 и времени выполнения предсказания\n",
    "print('Показатель F1     :', f1_score(target_test, predict))\n",
    "print(f'Время предсказания: {funtion_time} секунд')\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "**Выводы из тестирования лучшей модели**\n",
    "При тестировании, также как и при обучении лучшей модели, она показала результат `F1` существенно ниже 0.75, требуемого техническим заданием. Цель проекта не достигнута."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Выводы"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Цель проеекта не достигнута. Ресурсов автора проекта не хватило для использования максимального количества объектов датафрейма в процессе векторизации текстов с помощью технологии BERT. При этом проделана вся требуемая работа:\n",
    "1. Подготовлена тетрадь, загружены и проанализированы данные.\n",
    "1. Векторизована часть объектов с помощью технологии BERT.\n",
    "1. Обучены модели классификации с разными параметрами.\n",
    "1. Выбрана модель с самым высоким параметром `F1`.\n",
    "1. Выбранная модель протестирована.\n",
    "\n",
    "Исходя из вышесказанного можно предположить, что при увеличении количества ресурсов, и, следовательно, количества векторизуемых объектов с помощью BERT можно будет достичь целевыго уровня 0.75 значения параметра `F1`."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Чек-лист проверки"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "- [x]  Jupyter Notebook открыт\n",
    "- [x]  Весь код выполняется без ошибок\n",
    "- [x]  Ячейки с кодом расположены в порядке исполнения\n",
    "- [x]  Данные загружены и подготовлены\n",
    "- [x]  Модели обучены\n",
    "- [ ]  Значение метрики *F1* не меньше 0.75\n",
    "- [x]  Выводы написаны"
   ]
  }
 ],
 "metadata": {
  "ExecuteTimeLog": [
   {
    "duration": 2301,
    "start_time": "2023-08-30T18:50:31.763Z"
   },
   {
    "duration": 600,
    "start_time": "2023-08-30T18:51:04.760Z"
   },
   {
    "duration": 3110,
    "start_time": "2023-08-30T21:43:15.040Z"
   },
   {
    "duration": 307,
    "start_time": "2023-08-30T21:43:18.153Z"
   },
   {
    "duration": 0,
    "start_time": "2023-08-30T21:43:18.463Z"
   },
   {
    "duration": 2688,
    "start_time": "2023-08-30T21:44:04.526Z"
   },
   {
    "duration": 51,
    "start_time": "2023-08-30T21:44:11.548Z"
   },
   {
    "duration": 7,
    "start_time": "2023-08-30T21:45:22.004Z"
   },
   {
    "duration": 4,
    "start_time": "2023-08-30T21:48:13.137Z"
   },
   {
    "duration": 2003,
    "start_time": "2023-08-30T21:48:13.917Z"
   },
   {
    "duration": 3,
    "start_time": "2023-08-30T21:54:05.071Z"
   },
   {
    "duration": 5,
    "start_time": "2023-08-30T21:54:05.112Z"
   },
   {
    "duration": 5,
    "start_time": "2023-08-30T21:54:05.270Z"
   },
   {
    "duration": 12,
    "start_time": "2023-08-30T22:27:31.712Z"
   },
   {
    "duration": 16,
    "start_time": "2023-08-30T22:27:45.021Z"
   },
   {
    "duration": 46,
    "start_time": "2023-08-30T22:28:04.522Z"
   },
   {
    "duration": 58,
    "start_time": "2023-08-30T22:28:25.963Z"
   },
   {
    "duration": 45,
    "start_time": "2023-08-30T22:28:47.361Z"
   },
   {
    "duration": 3,
    "start_time": "2023-08-30T22:47:08.662Z"
   },
   {
    "duration": 2481,
    "start_time": "2023-08-30T22:47:08.904Z"
   },
   {
    "duration": 0,
    "start_time": "2023-08-30T22:47:11.388Z"
   },
   {
    "duration": 0,
    "start_time": "2023-08-30T22:47:11.389Z"
   },
   {
    "duration": 49,
    "start_time": "2023-08-30T22:53:09.289Z"
   },
   {
    "duration": 2956,
    "start_time": "2023-08-30T22:53:31.515Z"
   },
   {
    "duration": 2545,
    "start_time": "2023-08-30T22:53:34.473Z"
   },
   {
    "duration": 45,
    "start_time": "2023-08-30T22:53:37.021Z"
   },
   {
    "duration": 163,
    "start_time": "2023-08-30T22:53:37.068Z"
   },
   {
    "duration": 57,
    "start_time": "2023-08-30T22:53:37.233Z"
   },
   {
    "duration": 56,
    "start_time": "2023-08-30T22:53:37.292Z"
   },
   {
    "duration": 19996,
    "start_time": "2023-08-30T22:53:39.111Z"
   },
   {
    "duration": 304,
    "start_time": "2023-08-30T22:53:59.109Z"
   },
   {
    "duration": 2924,
    "start_time": "2023-08-30T23:05:22.314Z"
   },
   {
    "duration": 2510,
    "start_time": "2023-08-30T23:05:25.240Z"
   },
   {
    "duration": 46,
    "start_time": "2023-08-30T23:05:27.751Z"
   },
   {
    "duration": 30,
    "start_time": "2023-08-30T23:05:27.801Z"
   },
   {
    "duration": 4,
    "start_time": "2023-08-30T23:05:27.835Z"
   },
   {
    "duration": 12,
    "start_time": "2023-08-30T23:05:27.841Z"
   },
   {
    "duration": 2368,
    "start_time": "2023-08-30T23:05:27.855Z"
   },
   {
    "duration": 230183,
    "start_time": "2023-08-30T23:05:30.224Z"
   },
   {
    "duration": 26,
    "start_time": "2023-08-30T23:09:20.408Z"
   },
   {
    "duration": 3848,
    "start_time": "2023-09-13T13:26:45.162Z"
   },
   {
    "duration": 3767,
    "start_time": "2023-09-13T13:26:49.014Z"
   },
   {
    "duration": 50,
    "start_time": "2023-09-13T13:26:52.783Z"
   },
   {
    "duration": 23,
    "start_time": "2023-09-13T13:26:52.836Z"
   },
   {
    "duration": 13,
    "start_time": "2023-09-13T13:26:52.862Z"
   },
   {
    "duration": 4,
    "start_time": "2023-09-13T13:26:52.877Z"
   },
   {
    "duration": 7,
    "start_time": "2023-09-13T13:26:52.883Z"
   },
   {
    "duration": 2389,
    "start_time": "2023-09-13T13:26:52.891Z"
   },
   {
    "duration": 16579,
    "start_time": "2023-09-13T13:26:55.281Z"
   },
   {
    "duration": 8,
    "start_time": "2023-09-13T13:27:11.863Z"
   },
   {
    "duration": 2448,
    "start_time": "2023-09-13T13:27:11.873Z"
   },
   {
    "duration": 123,
    "start_time": "2023-09-13T13:27:14.323Z"
   },
   {
    "duration": 29217,
    "start_time": "2023-09-13T13:27:14.448Z"
   },
   {
    "duration": 376,
    "start_time": "2023-09-13T13:27:43.667Z"
   },
   {
    "duration": 0,
    "start_time": "2023-09-13T13:27:44.045Z"
   },
   {
    "duration": 0,
    "start_time": "2023-09-13T13:27:44.046Z"
   },
   {
    "duration": 0,
    "start_time": "2023-09-13T13:27:44.048Z"
   },
   {
    "duration": 0,
    "start_time": "2023-09-13T13:27:44.049Z"
   },
   {
    "duration": 2960,
    "start_time": "2023-09-13T13:29:18.190Z"
   },
   {
    "duration": 1063,
    "start_time": "2023-09-13T13:29:21.152Z"
   },
   {
    "duration": 48,
    "start_time": "2023-09-13T13:29:22.217Z"
   },
   {
    "duration": 5,
    "start_time": "2023-09-13T13:29:22.267Z"
   },
   {
    "duration": 160,
    "start_time": "2023-09-13T13:29:22.275Z"
   },
   {
    "duration": 0,
    "start_time": "2023-09-13T13:29:22.437Z"
   },
   {
    "duration": 0,
    "start_time": "2023-09-13T13:29:22.438Z"
   },
   {
    "duration": 0,
    "start_time": "2023-09-13T13:29:22.439Z"
   },
   {
    "duration": 0,
    "start_time": "2023-09-13T13:29:22.440Z"
   },
   {
    "duration": 0,
    "start_time": "2023-09-13T13:29:22.441Z"
   },
   {
    "duration": 0,
    "start_time": "2023-09-13T13:29:22.442Z"
   },
   {
    "duration": 0,
    "start_time": "2023-09-13T13:29:22.456Z"
   },
   {
    "duration": 0,
    "start_time": "2023-09-13T13:29:22.458Z"
   },
   {
    "duration": 0,
    "start_time": "2023-09-13T13:29:22.459Z"
   },
   {
    "duration": 0,
    "start_time": "2023-09-13T13:29:22.460Z"
   },
   {
    "duration": 0,
    "start_time": "2023-09-13T13:29:22.461Z"
   },
   {
    "duration": 0,
    "start_time": "2023-09-13T13:29:22.462Z"
   },
   {
    "duration": 0,
    "start_time": "2023-09-13T13:29:22.464Z"
   },
   {
    "duration": 3186,
    "start_time": "2023-09-13T13:30:10.353Z"
   },
   {
    "duration": 3,
    "start_time": "2023-09-13T13:30:13.541Z"
   },
   {
    "duration": 1266,
    "start_time": "2023-09-13T13:30:13.545Z"
   },
   {
    "duration": 64,
    "start_time": "2023-09-13T13:30:14.814Z"
   },
   {
    "duration": 7,
    "start_time": "2023-09-13T13:30:14.880Z"
   },
   {
    "duration": 21,
    "start_time": "2023-09-13T13:30:14.889Z"
   },
   {
    "duration": 10,
    "start_time": "2023-09-13T13:30:14.912Z"
   },
   {
    "duration": 6,
    "start_time": "2023-09-13T13:30:14.925Z"
   },
   {
    "duration": 2060,
    "start_time": "2023-09-13T13:30:14.933Z"
   },
   {
    "duration": 15767,
    "start_time": "2023-09-13T13:30:16.997Z"
   },
   {
    "duration": 14,
    "start_time": "2023-09-13T13:30:32.767Z"
   },
   {
    "duration": 3057,
    "start_time": "2023-09-13T13:30:32.783Z"
   },
   {
    "duration": 140,
    "start_time": "2023-09-13T13:30:35.842Z"
   },
   {
    "duration": 2649,
    "start_time": "2023-09-13T13:30:35.984Z"
   },
   {
    "duration": 433,
    "start_time": "2023-09-13T13:30:38.635Z"
   },
   {
    "duration": 0,
    "start_time": "2023-09-13T13:30:39.071Z"
   },
   {
    "duration": 0,
    "start_time": "2023-09-13T13:30:39.073Z"
   },
   {
    "duration": 0,
    "start_time": "2023-09-13T13:30:39.074Z"
   },
   {
    "duration": 0,
    "start_time": "2023-09-13T13:30:39.075Z"
   },
   {
    "duration": 52,
    "start_time": "2023-09-13T13:31:06.640Z"
   },
   {
    "duration": 55,
    "start_time": "2023-09-13T13:31:15.032Z"
   },
   {
    "duration": 79,
    "start_time": "2023-09-13T13:31:28.844Z"
   },
   {
    "duration": 50,
    "start_time": "2023-09-13T13:31:46.312Z"
   },
   {
    "duration": 47,
    "start_time": "2023-09-13T15:51:14.522Z"
   },
   {
    "duration": 3127,
    "start_time": "2023-09-13T15:53:37.057Z"
   },
   {
    "duration": 3,
    "start_time": "2023-09-13T15:53:40.186Z"
   },
   {
    "duration": 1090,
    "start_time": "2023-09-13T15:53:40.190Z"
   },
   {
    "duration": 44,
    "start_time": "2023-09-13T15:53:41.282Z"
   },
   {
    "duration": 5,
    "start_time": "2023-09-13T15:53:41.328Z"
   },
   {
    "duration": 23,
    "start_time": "2023-09-13T15:53:41.335Z"
   },
   {
    "duration": 10,
    "start_time": "2023-09-13T15:53:41.360Z"
   },
   {
    "duration": 7,
    "start_time": "2023-09-13T15:53:41.372Z"
   },
   {
    "duration": 28,
    "start_time": "2023-09-13T15:53:41.380Z"
   },
   {
    "duration": 2008,
    "start_time": "2023-09-13T15:53:41.410Z"
   },
   {
    "duration": 1516,
    "start_time": "2023-09-13T15:53:43.419Z"
   },
   {
    "duration": 3,
    "start_time": "2023-09-13T15:53:44.937Z"
   },
   {
    "duration": 147,
    "start_time": "2023-09-13T15:53:44.942Z"
   },
   {
    "duration": 45,
    "start_time": "2023-09-13T15:53:45.090Z"
   },
   {
    "duration": 2498,
    "start_time": "2023-09-13T15:53:45.137Z"
   },
   {
    "duration": 364,
    "start_time": "2023-09-13T15:53:47.637Z"
   },
   {
    "duration": 0,
    "start_time": "2023-09-13T15:53:48.003Z"
   },
   {
    "duration": 0,
    "start_time": "2023-09-13T15:53:48.004Z"
   },
   {
    "duration": 0,
    "start_time": "2023-09-13T15:53:48.005Z"
   },
   {
    "duration": 0,
    "start_time": "2023-09-13T15:53:48.008Z"
   },
   {
    "duration": 3027,
    "start_time": "2023-09-13T15:55:28.753Z"
   },
   {
    "duration": 2,
    "start_time": "2023-09-13T15:55:31.783Z"
   },
   {
    "duration": 1170,
    "start_time": "2023-09-13T15:55:31.787Z"
   },
   {
    "duration": 54,
    "start_time": "2023-09-13T15:55:32.960Z"
   },
   {
    "duration": 10,
    "start_time": "2023-09-13T15:55:33.016Z"
   },
   {
    "duration": 32,
    "start_time": "2023-09-13T15:55:33.028Z"
   },
   {
    "duration": 11,
    "start_time": "2023-09-13T15:55:33.062Z"
   },
   {
    "duration": 15,
    "start_time": "2023-09-13T15:55:33.075Z"
   },
   {
    "duration": 25,
    "start_time": "2023-09-13T15:55:33.092Z"
   },
   {
    "duration": 2119,
    "start_time": "2023-09-13T15:55:33.121Z"
   },
   {
    "duration": 1476,
    "start_time": "2023-09-13T15:55:35.242Z"
   },
   {
    "duration": 3,
    "start_time": "2023-09-13T15:55:36.720Z"
   },
   {
    "duration": 150,
    "start_time": "2023-09-13T15:55:36.725Z"
   },
   {
    "duration": 12,
    "start_time": "2023-09-13T15:55:36.877Z"
   },
   {
    "duration": 2622,
    "start_time": "2023-09-13T15:55:36.891Z"
   },
   {
    "duration": 86,
    "start_time": "2023-09-13T15:55:39.515Z"
   },
   {
    "duration": 0,
    "start_time": "2023-09-13T15:55:39.603Z"
   },
   {
    "duration": 0,
    "start_time": "2023-09-13T15:55:39.604Z"
   },
   {
    "duration": 0,
    "start_time": "2023-09-13T15:55:39.606Z"
   },
   {
    "duration": 0,
    "start_time": "2023-09-13T15:55:39.607Z"
   },
   {
    "duration": 78,
    "start_time": "2023-09-13T15:56:09.726Z"
   },
   {
    "duration": 5487,
    "start_time": "2023-09-13T16:11:02.189Z"
   },
   {
    "duration": 3,
    "start_time": "2023-09-13T16:11:07.679Z"
   },
   {
    "duration": 3898,
    "start_time": "2023-09-13T16:11:07.684Z"
   },
   {
    "duration": 72,
    "start_time": "2023-09-13T16:11:11.585Z"
   },
   {
    "duration": 8,
    "start_time": "2023-09-13T16:11:11.661Z"
   },
   {
    "duration": 30,
    "start_time": "2023-09-13T16:11:11.671Z"
   },
   {
    "duration": 15,
    "start_time": "2023-09-13T16:11:11.703Z"
   },
   {
    "duration": 6,
    "start_time": "2023-09-13T16:11:11.721Z"
   },
   {
    "duration": 30,
    "start_time": "2023-09-13T16:11:11.728Z"
   },
   {
    "duration": 6516,
    "start_time": "2023-09-13T16:11:11.760Z"
   },
   {
    "duration": 1686,
    "start_time": "2023-09-13T16:11:18.277Z"
   },
   {
    "duration": 4,
    "start_time": "2023-09-13T16:11:19.965Z"
   },
   {
    "duration": 187,
    "start_time": "2023-09-13T16:11:19.970Z"
   },
   {
    "duration": 68,
    "start_time": "2023-09-13T16:11:20.159Z"
   },
   {
    "duration": 29597,
    "start_time": "2023-09-13T16:11:20.229Z"
   },
   {
    "duration": 97,
    "start_time": "2023-09-13T16:11:49.828Z"
   },
   {
    "duration": 0,
    "start_time": "2023-09-13T16:11:49.928Z"
   },
   {
    "duration": 0,
    "start_time": "2023-09-13T16:11:49.929Z"
   },
   {
    "duration": 0,
    "start_time": "2023-09-13T16:11:49.930Z"
   },
   {
    "duration": 0,
    "start_time": "2023-09-13T16:11:49.931Z"
   },
   {
    "duration": 81,
    "start_time": "2023-09-13T16:14:17.622Z"
   },
   {
    "duration": 81,
    "start_time": "2023-09-13T16:15:07.641Z"
   },
   {
    "duration": 3188,
    "start_time": "2023-09-13T16:15:50.935Z"
   },
   {
    "duration": 3,
    "start_time": "2023-09-13T16:15:54.125Z"
   },
   {
    "duration": 1173,
    "start_time": "2023-09-13T16:15:54.130Z"
   },
   {
    "duration": 85,
    "start_time": "2023-09-13T16:15:55.307Z"
   },
   {
    "duration": 6,
    "start_time": "2023-09-13T16:15:55.394Z"
   },
   {
    "duration": 26,
    "start_time": "2023-09-13T16:15:55.403Z"
   },
   {
    "duration": 3,
    "start_time": "2023-09-13T16:15:55.432Z"
   },
   {
    "duration": 17,
    "start_time": "2023-09-13T16:15:55.458Z"
   },
   {
    "duration": 20,
    "start_time": "2023-09-13T16:15:55.477Z"
   },
   {
    "duration": 2182,
    "start_time": "2023-09-13T16:15:55.499Z"
   },
   {
    "duration": 1673,
    "start_time": "2023-09-13T16:15:57.683Z"
   },
   {
    "duration": 4,
    "start_time": "2023-09-13T16:15:59.359Z"
   },
   {
    "duration": 215,
    "start_time": "2023-09-13T16:15:59.366Z"
   },
   {
    "duration": 9,
    "start_time": "2023-09-13T16:15:59.583Z"
   },
   {
    "duration": 2835,
    "start_time": "2023-09-13T16:15:59.594Z"
   },
   {
    "duration": 96,
    "start_time": "2023-09-13T16:16:02.431Z"
   },
   {
    "duration": 0,
    "start_time": "2023-09-13T16:16:02.530Z"
   },
   {
    "duration": 0,
    "start_time": "2023-09-13T16:16:02.532Z"
   },
   {
    "duration": 1,
    "start_time": "2023-09-13T16:16:02.533Z"
   },
   {
    "duration": 0,
    "start_time": "2023-09-13T16:16:02.535Z"
   },
   {
    "duration": 2712,
    "start_time": "2023-09-14T09:45:18.646Z"
   },
   {
    "duration": 3,
    "start_time": "2023-09-14T09:45:21.360Z"
   },
   {
    "duration": 2473,
    "start_time": "2023-09-14T09:45:21.365Z"
   },
   {
    "duration": 42,
    "start_time": "2023-09-14T09:45:23.841Z"
   },
   {
    "duration": 4,
    "start_time": "2023-09-14T09:45:23.885Z"
   },
   {
    "duration": 19,
    "start_time": "2023-09-14T09:45:23.891Z"
   },
   {
    "duration": 22,
    "start_time": "2023-09-14T09:45:23.911Z"
   },
   {
    "duration": 20,
    "start_time": "2023-09-14T09:45:23.935Z"
   },
   {
    "duration": 11,
    "start_time": "2023-09-14T09:45:23.956Z"
   },
   {
    "duration": 1890,
    "start_time": "2023-09-14T09:45:23.969Z"
   },
   {
    "duration": 1349,
    "start_time": "2023-09-14T09:45:25.861Z"
   },
   {
    "duration": 4,
    "start_time": "2023-09-14T09:45:27.212Z"
   },
   {
    "duration": 126,
    "start_time": "2023-09-14T09:45:27.218Z"
   },
   {
    "duration": 21,
    "start_time": "2023-09-14T09:45:27.346Z"
   },
   {
    "duration": 16141,
    "start_time": "2023-09-14T09:45:27.368Z"
   },
   {
    "duration": 89,
    "start_time": "2023-09-14T09:45:43.511Z"
   },
   {
    "duration": 0,
    "start_time": "2023-09-14T09:45:43.602Z"
   },
   {
    "duration": 0,
    "start_time": "2023-09-14T09:45:43.603Z"
   },
   {
    "duration": 0,
    "start_time": "2023-09-14T09:45:43.605Z"
   },
   {
    "duration": 0,
    "start_time": "2023-09-14T09:45:43.606Z"
   },
   {
    "duration": 3219,
    "start_time": "2023-09-14T10:45:46.897Z"
   },
   {
    "duration": 3,
    "start_time": "2023-09-14T10:45:50.119Z"
   },
   {
    "duration": 888,
    "start_time": "2023-09-14T10:45:50.123Z"
   },
   {
    "duration": 41,
    "start_time": "2023-09-14T10:45:51.013Z"
   },
   {
    "duration": 9,
    "start_time": "2023-09-14T10:45:51.055Z"
   },
   {
    "duration": 56,
    "start_time": "2023-09-14T10:45:51.066Z"
   },
   {
    "duration": 62,
    "start_time": "2023-09-14T10:45:51.124Z"
   },
   {
    "duration": 38,
    "start_time": "2023-09-14T10:45:51.188Z"
   },
   {
    "duration": 55,
    "start_time": "2023-09-14T10:45:51.228Z"
   },
   {
    "duration": 1660,
    "start_time": "2023-09-14T10:45:51.285Z"
   },
   {
    "duration": 2509,
    "start_time": "2023-09-14T10:45:52.947Z"
   },
   {
    "duration": 2,
    "start_time": "2023-09-14T10:45:55.458Z"
   },
   {
    "duration": 306,
    "start_time": "2023-09-14T10:45:55.462Z"
   },
   {
    "duration": 18,
    "start_time": "2023-09-14T10:45:55.770Z"
   },
   {
    "duration": 2239,
    "start_time": "2023-09-14T10:45:55.790Z"
   },
   {
    "duration": 75,
    "start_time": "2023-09-14T10:45:58.031Z"
   },
   {
    "duration": 0,
    "start_time": "2023-09-14T10:45:58.107Z"
   },
   {
    "duration": 0,
    "start_time": "2023-09-14T10:45:58.109Z"
   },
   {
    "duration": 0,
    "start_time": "2023-09-14T10:45:58.110Z"
   },
   {
    "duration": 0,
    "start_time": "2023-09-14T10:45:58.111Z"
   },
   {
    "duration": 267,
    "start_time": "2023-09-14T10:53:17.304Z"
   },
   {
    "duration": 154,
    "start_time": "2023-09-14T10:53:23.733Z"
   },
   {
    "duration": 120,
    "start_time": "2023-09-14T11:15:20.509Z"
   },
   {
    "duration": 48,
    "start_time": "2023-09-14T11:19:31.765Z"
   },
   {
    "duration": 43,
    "start_time": "2023-09-14T11:24:07.045Z"
   },
   {
    "duration": 6,
    "start_time": "2023-09-14T11:25:13.966Z"
   },
   {
    "duration": 383,
    "start_time": "2023-09-14T11:29:43.211Z"
   },
   {
    "duration": 274,
    "start_time": "2023-09-14T11:31:10.207Z"
   },
   {
    "duration": 302,
    "start_time": "2023-09-14T11:31:32.881Z"
   },
   {
    "duration": 308,
    "start_time": "2023-09-14T11:31:44.633Z"
   },
   {
    "duration": 3234,
    "start_time": "2023-09-14T11:32:17.121Z"
   },
   {
    "duration": 2,
    "start_time": "2023-09-14T11:32:20.357Z"
   },
   {
    "duration": 926,
    "start_time": "2023-09-14T11:32:20.360Z"
   },
   {
    "duration": 37,
    "start_time": "2023-09-14T11:32:21.288Z"
   },
   {
    "duration": 6,
    "start_time": "2023-09-14T11:32:21.326Z"
   },
   {
    "duration": 47,
    "start_time": "2023-09-14T11:32:21.333Z"
   },
   {
    "duration": 19,
    "start_time": "2023-09-14T11:32:21.382Z"
   },
   {
    "duration": 12,
    "start_time": "2023-09-14T11:32:21.403Z"
   },
   {
    "duration": 40,
    "start_time": "2023-09-14T11:32:21.417Z"
   },
   {
    "duration": 1690,
    "start_time": "2023-09-14T11:32:21.460Z"
   },
   {
    "duration": 2541,
    "start_time": "2023-09-14T11:32:23.151Z"
   },
   {
    "duration": 5,
    "start_time": "2023-09-14T11:32:25.694Z"
   },
   {
    "duration": 329,
    "start_time": "2023-09-14T11:32:25.700Z"
   },
   {
    "duration": 8,
    "start_time": "2023-09-14T11:32:26.031Z"
   },
   {
    "duration": 2271,
    "start_time": "2023-09-14T11:32:26.040Z"
   },
   {
    "duration": 439637,
    "start_time": "2023-09-14T11:32:28.313Z"
   },
   {
    "duration": 0,
    "start_time": "2023-09-14T11:39:47.951Z"
   },
   {
    "duration": 0,
    "start_time": "2023-09-14T11:39:47.953Z"
   },
   {
    "duration": 0,
    "start_time": "2023-09-14T11:39:47.954Z"
   },
   {
    "duration": 0,
    "start_time": "2023-09-14T11:39:47.956Z"
   },
   {
    "duration": 2965,
    "start_time": "2023-09-14T11:54:22.606Z"
   },
   {
    "duration": 3,
    "start_time": "2023-09-14T11:54:25.574Z"
   },
   {
    "duration": 1107,
    "start_time": "2023-09-14T11:54:25.579Z"
   },
   {
    "duration": 38,
    "start_time": "2023-09-14T11:54:26.688Z"
   },
   {
    "duration": 5,
    "start_time": "2023-09-14T11:54:26.727Z"
   },
   {
    "duration": 24,
    "start_time": "2023-09-14T11:54:26.733Z"
   },
   {
    "duration": 9,
    "start_time": "2023-09-14T11:54:26.759Z"
   },
   {
    "duration": 22,
    "start_time": "2023-09-14T11:54:26.770Z"
   },
   {
    "duration": 10,
    "start_time": "2023-09-14T11:54:26.793Z"
   },
   {
    "duration": 1850,
    "start_time": "2023-09-14T11:54:26.805Z"
   },
   {
    "duration": 2927,
    "start_time": "2023-09-14T11:54:28.657Z"
   },
   {
    "duration": 4,
    "start_time": "2023-09-14T11:54:31.586Z"
   },
   {
    "duration": 428,
    "start_time": "2023-09-14T11:54:31.592Z"
   },
   {
    "duration": 25,
    "start_time": "2023-09-14T11:54:32.022Z"
   },
   {
    "duration": 2454,
    "start_time": "2023-09-14T11:54:32.049Z"
   },
   {
    "duration": 3048,
    "start_time": "2023-09-14T11:56:25.828Z"
   },
   {
    "duration": 3,
    "start_time": "2023-09-14T11:56:28.878Z"
   },
   {
    "duration": 2483,
    "start_time": "2023-09-14T11:56:28.882Z"
   },
   {
    "duration": 43,
    "start_time": "2023-09-14T11:56:31.368Z"
   },
   {
    "duration": 4,
    "start_time": "2023-09-14T11:56:31.412Z"
   },
   {
    "duration": 95,
    "start_time": "2023-09-14T11:56:31.418Z"
   },
   {
    "duration": 62,
    "start_time": "2023-09-14T11:56:31.515Z"
   },
   {
    "duration": 30,
    "start_time": "2023-09-14T11:56:31.579Z"
   },
   {
    "duration": 41,
    "start_time": "2023-09-14T11:56:31.611Z"
   },
   {
    "duration": 2081,
    "start_time": "2023-09-14T11:56:31.656Z"
   },
   {
    "duration": 3270,
    "start_time": "2023-09-14T11:56:33.739Z"
   },
   {
    "duration": 4,
    "start_time": "2023-09-14T11:56:37.010Z"
   },
   {
    "duration": 389,
    "start_time": "2023-09-14T11:56:37.016Z"
   },
   {
    "duration": 8,
    "start_time": "2023-09-14T11:56:37.406Z"
   },
   {
    "duration": 17692,
    "start_time": "2023-09-14T11:56:37.415Z"
   },
   {
    "duration": 3195,
    "start_time": "2023-09-14T12:12:49.606Z"
   },
   {
    "duration": 3,
    "start_time": "2023-09-14T12:12:52.803Z"
   },
   {
    "duration": 2539,
    "start_time": "2023-09-14T12:12:52.807Z"
   },
   {
    "duration": 45,
    "start_time": "2023-09-14T12:12:55.348Z"
   },
   {
    "duration": 4,
    "start_time": "2023-09-14T12:12:55.395Z"
   },
   {
    "duration": 21,
    "start_time": "2023-09-14T12:12:55.400Z"
   },
   {
    "duration": 7,
    "start_time": "2023-09-14T12:12:55.422Z"
   },
   {
    "duration": 11,
    "start_time": "2023-09-14T12:12:55.430Z"
   },
   {
    "duration": 15,
    "start_time": "2023-09-14T12:12:55.442Z"
   },
   {
    "duration": 2149,
    "start_time": "2023-09-14T12:12:55.459Z"
   },
   {
    "duration": 2936,
    "start_time": "2023-09-14T12:12:57.609Z"
   },
   {
    "duration": 7,
    "start_time": "2023-09-14T12:13:00.547Z"
   },
   {
    "duration": 580,
    "start_time": "2023-09-14T12:13:00.556Z"
   },
   {
    "duration": 46,
    "start_time": "2023-09-14T12:13:01.140Z"
   },
   {
    "duration": 17738,
    "start_time": "2023-09-14T12:13:01.188Z"
   },
   {
    "duration": 3379,
    "start_time": "2023-09-14T12:40:17.794Z"
   },
   {
    "duration": 0,
    "start_time": "2023-09-14T12:40:21.176Z"
   },
   {
    "duration": 1,
    "start_time": "2023-09-14T12:40:21.177Z"
   },
   {
    "duration": 0,
    "start_time": "2023-09-14T12:40:21.179Z"
   },
   {
    "duration": 0,
    "start_time": "2023-09-14T12:40:21.180Z"
   },
   {
    "duration": 0,
    "start_time": "2023-09-14T12:40:21.181Z"
   },
   {
    "duration": 0,
    "start_time": "2023-09-14T12:40:21.182Z"
   },
   {
    "duration": 0,
    "start_time": "2023-09-14T12:40:21.184Z"
   },
   {
    "duration": 0,
    "start_time": "2023-09-14T12:40:21.185Z"
   },
   {
    "duration": 0,
    "start_time": "2023-09-14T12:40:21.186Z"
   },
   {
    "duration": 0,
    "start_time": "2023-09-14T12:40:21.188Z"
   },
   {
    "duration": 0,
    "start_time": "2023-09-14T12:40:21.189Z"
   },
   {
    "duration": 0,
    "start_time": "2023-09-14T12:40:21.190Z"
   },
   {
    "duration": 0,
    "start_time": "2023-09-14T12:40:21.192Z"
   },
   {
    "duration": 0,
    "start_time": "2023-09-14T12:40:21.194Z"
   },
   {
    "duration": 0,
    "start_time": "2023-09-14T12:40:21.195Z"
   },
   {
    "duration": 0,
    "start_time": "2023-09-14T12:40:21.196Z"
   },
   {
    "duration": 0,
    "start_time": "2023-09-14T12:40:21.198Z"
   },
   {
    "duration": 0,
    "start_time": "2023-09-14T12:40:21.199Z"
   },
   {
    "duration": 0,
    "start_time": "2023-09-14T12:40:21.200Z"
   },
   {
    "duration": 0,
    "start_time": "2023-09-14T12:40:21.202Z"
   },
   {
    "duration": 0,
    "start_time": "2023-09-14T12:40:21.203Z"
   },
   {
    "duration": 0,
    "start_time": "2023-09-14T12:40:21.204Z"
   },
   {
    "duration": 0,
    "start_time": "2023-09-14T12:40:21.205Z"
   },
   {
    "duration": 0,
    "start_time": "2023-09-14T12:40:21.206Z"
   },
   {
    "duration": 3941,
    "start_time": "2023-09-14T12:40:46.069Z"
   },
   {
    "duration": 2,
    "start_time": "2023-09-14T12:40:50.012Z"
   },
   {
    "duration": 2429,
    "start_time": "2023-09-14T12:40:50.016Z"
   },
   {
    "duration": 43,
    "start_time": "2023-09-14T12:40:52.446Z"
   },
   {
    "duration": 4,
    "start_time": "2023-09-14T12:40:52.491Z"
   },
   {
    "duration": 31,
    "start_time": "2023-09-14T12:40:52.496Z"
   },
   {
    "duration": 12,
    "start_time": "2023-09-14T12:40:52.529Z"
   },
   {
    "duration": 20,
    "start_time": "2023-09-14T12:40:52.542Z"
   },
   {
    "duration": 16,
    "start_time": "2023-09-14T12:40:52.564Z"
   },
   {
    "duration": 1994,
    "start_time": "2023-09-14T12:40:52.582Z"
   },
   {
    "duration": 1498,
    "start_time": "2023-09-14T12:40:54.577Z"
   },
   {
    "duration": 4,
    "start_time": "2023-09-14T12:40:56.077Z"
   },
   {
    "duration": 214,
    "start_time": "2023-09-14T12:40:56.083Z"
   },
   {
    "duration": 5,
    "start_time": "2023-09-14T12:40:56.301Z"
   },
   {
    "duration": 17748,
    "start_time": "2023-09-14T12:40:56.308Z"
   },
   {
    "duration": 3486,
    "start_time": "2023-09-14T13:10:25.380Z"
   },
   {
    "duration": 2,
    "start_time": "2023-09-14T13:10:28.868Z"
   },
   {
    "duration": 2392,
    "start_time": "2023-09-14T13:10:28.871Z"
   },
   {
    "duration": 35,
    "start_time": "2023-09-14T13:10:31.265Z"
   },
   {
    "duration": 5,
    "start_time": "2023-09-14T13:10:31.302Z"
   },
   {
    "duration": 165,
    "start_time": "2023-09-14T13:10:31.309Z"
   },
   {
    "duration": 32,
    "start_time": "2023-09-14T13:10:31.476Z"
   },
   {
    "duration": 31,
    "start_time": "2023-09-14T13:10:31.510Z"
   },
   {
    "duration": 69,
    "start_time": "2023-09-14T13:10:31.543Z"
   },
   {
    "duration": 1920,
    "start_time": "2023-09-14T13:10:31.615Z"
   },
   {
    "duration": 1301,
    "start_time": "2023-09-14T13:10:33.537Z"
   },
   {
    "duration": 4,
    "start_time": "2023-09-14T13:10:34.839Z"
   },
   {
    "duration": 130,
    "start_time": "2023-09-14T13:10:34.849Z"
   },
   {
    "duration": 28,
    "start_time": "2023-09-14T13:10:34.981Z"
   },
   {
    "duration": 16256,
    "start_time": "2023-09-14T13:10:35.011Z"
   },
   {
    "duration": 2850,
    "start_time": "2023-09-14T15:09:59.222Z"
   },
   {
    "duration": 3,
    "start_time": "2023-09-14T15:10:02.074Z"
   },
   {
    "duration": 2321,
    "start_time": "2023-09-14T15:10:02.078Z"
   },
   {
    "duration": 37,
    "start_time": "2023-09-14T15:10:04.401Z"
   },
   {
    "duration": 15,
    "start_time": "2023-09-14T15:10:04.439Z"
   },
   {
    "duration": 8,
    "start_time": "2023-09-14T15:10:04.455Z"
   },
   {
    "duration": 7,
    "start_time": "2023-09-14T15:10:04.464Z"
   },
   {
    "duration": 18,
    "start_time": "2023-09-14T15:10:04.472Z"
   },
   {
    "duration": 6,
    "start_time": "2023-09-14T15:10:04.492Z"
   },
   {
    "duration": 1861,
    "start_time": "2023-09-14T15:10:04.501Z"
   },
   {
    "duration": 1334,
    "start_time": "2023-09-14T15:10:06.364Z"
   },
   {
    "duration": 3,
    "start_time": "2023-09-14T15:10:07.700Z"
   },
   {
    "duration": 169,
    "start_time": "2023-09-14T15:10:07.704Z"
   },
   {
    "duration": 8,
    "start_time": "2023-09-14T15:10:07.875Z"
   },
   {
    "duration": 16030,
    "start_time": "2023-09-14T15:10:07.884Z"
   },
   {
    "duration": 3393,
    "start_time": "2023-09-14T15:51:05.975Z"
   },
   {
    "duration": 3,
    "start_time": "2023-09-14T15:51:09.370Z"
   },
   {
    "duration": 2360,
    "start_time": "2023-09-14T15:51:09.375Z"
   },
   {
    "duration": 34,
    "start_time": "2023-09-14T15:51:11.737Z"
   },
   {
    "duration": 4,
    "start_time": "2023-09-14T15:51:11.773Z"
   },
   {
    "duration": 10,
    "start_time": "2023-09-14T15:51:11.778Z"
   },
   {
    "duration": 6,
    "start_time": "2023-09-14T15:51:11.789Z"
   },
   {
    "duration": 7,
    "start_time": "2023-09-14T15:51:11.796Z"
   },
   {
    "duration": 18,
    "start_time": "2023-09-14T15:51:11.804Z"
   },
   {
    "duration": 1942,
    "start_time": "2023-09-14T15:51:11.823Z"
   },
   {
    "duration": 1270,
    "start_time": "2023-09-14T15:51:13.767Z"
   },
   {
    "duration": 10,
    "start_time": "2023-09-14T15:51:15.039Z"
   },
   {
    "duration": 186,
    "start_time": "2023-09-14T15:51:15.051Z"
   },
   {
    "duration": 10,
    "start_time": "2023-09-14T15:51:15.240Z"
   },
   {
    "duration": 16799,
    "start_time": "2023-09-14T15:51:15.251Z"
   },
   {
    "duration": 3480,
    "start_time": "2023-09-14T16:20:01.530Z"
   },
   {
    "duration": 3,
    "start_time": "2023-09-14T16:20:05.012Z"
   },
   {
    "duration": 2421,
    "start_time": "2023-09-14T16:20:05.017Z"
   },
   {
    "duration": 39,
    "start_time": "2023-09-14T16:20:07.440Z"
   },
   {
    "duration": 27,
    "start_time": "2023-09-14T16:20:07.480Z"
   },
   {
    "duration": 41,
    "start_time": "2023-09-14T16:20:07.509Z"
   },
   {
    "duration": 48,
    "start_time": "2023-09-14T16:20:07.552Z"
   },
   {
    "duration": 17,
    "start_time": "2023-09-14T16:20:07.601Z"
   },
   {
    "duration": 24,
    "start_time": "2023-09-14T16:20:07.619Z"
   },
   {
    "duration": 2926,
    "start_time": "2023-09-14T16:20:07.645Z"
   },
   {
    "duration": 917,
    "start_time": "2023-09-14T16:20:10.573Z"
   },
   {
    "duration": 4,
    "start_time": "2023-09-14T16:20:11.491Z"
   },
   {
    "duration": 90,
    "start_time": "2023-09-14T16:20:11.496Z"
   },
   {
    "duration": 13,
    "start_time": "2023-09-14T16:20:11.588Z"
   },
   {
    "duration": 17039,
    "start_time": "2023-09-14T16:20:11.602Z"
   },
   {
    "duration": 3335,
    "start_time": "2023-09-14T19:06:02.677Z"
   },
   {
    "duration": 3,
    "start_time": "2023-09-14T19:06:06.015Z"
   },
   {
    "duration": 3101,
    "start_time": "2023-09-14T19:06:06.020Z"
   },
   {
    "duration": 66,
    "start_time": "2023-09-14T19:06:09.123Z"
   },
   {
    "duration": 14,
    "start_time": "2023-09-14T19:06:09.196Z"
   },
   {
    "duration": 63,
    "start_time": "2023-09-14T19:06:09.212Z"
   },
   {
    "duration": 23,
    "start_time": "2023-09-14T19:06:09.277Z"
   },
   {
    "duration": 58,
    "start_time": "2023-09-14T19:06:09.303Z"
   },
   {
    "duration": 17,
    "start_time": "2023-09-14T19:06:09.363Z"
   },
   {
    "duration": 2404,
    "start_time": "2023-09-14T19:06:09.382Z"
   },
   {
    "duration": 830,
    "start_time": "2023-09-14T19:06:11.788Z"
   },
   {
    "duration": 4,
    "start_time": "2023-09-14T19:06:12.620Z"
   },
   {
    "duration": 109,
    "start_time": "2023-09-14T19:06:12.626Z"
   },
   {
    "duration": 4,
    "start_time": "2023-09-14T19:06:12.738Z"
   },
   {
    "duration": 20774,
    "start_time": "2023-09-14T19:06:12.744Z"
   },
   {
    "duration": 3434,
    "start_time": "2023-09-15T03:23:33.451Z"
   },
   {
    "duration": 3,
    "start_time": "2023-09-15T03:23:36.887Z"
   },
   {
    "duration": 2783,
    "start_time": "2023-09-15T03:23:36.892Z"
   },
   {
    "duration": 46,
    "start_time": "2023-09-15T03:23:39.677Z"
   },
   {
    "duration": 5,
    "start_time": "2023-09-15T03:23:39.725Z"
   },
   {
    "duration": 13,
    "start_time": "2023-09-15T03:23:39.732Z"
   },
   {
    "duration": 7,
    "start_time": "2023-09-15T03:23:39.746Z"
   },
   {
    "duration": 6,
    "start_time": "2023-09-15T03:23:39.755Z"
   },
   {
    "duration": 5,
    "start_time": "2023-09-15T03:23:39.762Z"
   },
   {
    "duration": 2566,
    "start_time": "2023-09-15T03:23:39.769Z"
   },
   {
    "duration": 841,
    "start_time": "2023-09-15T03:23:42.337Z"
   },
   {
    "duration": 4,
    "start_time": "2023-09-15T03:23:43.180Z"
   },
   {
    "duration": 84,
    "start_time": "2023-09-15T03:23:43.186Z"
   },
   {
    "duration": 32,
    "start_time": "2023-09-15T03:23:43.273Z"
   },
   {
    "duration": 17910,
    "start_time": "2023-09-15T03:23:43.307Z"
   },
   {
    "duration": 1170703,
    "start_time": "2023-09-15T03:24:01.219Z"
   },
   {
    "duration": 7,
    "start_time": "2023-09-15T03:43:31.924Z"
   },
   {
    "duration": 62,
    "start_time": "2023-09-15T03:43:31.933Z"
   },
   {
    "duration": 31,
    "start_time": "2023-09-15T03:43:31.997Z"
   },
   {
    "duration": 30,
    "start_time": "2023-09-15T03:43:32.030Z"
   },
   {
    "duration": 379,
    "start_time": "2023-09-15T03:43:32.062Z"
   },
   {
    "duration": 0,
    "start_time": "2023-09-15T03:43:32.444Z"
   },
   {
    "duration": 0,
    "start_time": "2023-09-15T03:43:32.445Z"
   },
   {
    "duration": 0,
    "start_time": "2023-09-15T03:43:32.447Z"
   },
   {
    "duration": 0,
    "start_time": "2023-09-15T03:43:32.448Z"
   },
   {
    "duration": 9886,
    "start_time": "2023-09-15T05:14:03.191Z"
   },
   {
    "duration": 0,
    "start_time": "2023-09-15T05:14:13.079Z"
   },
   {
    "duration": 2683,
    "start_time": "2023-09-15T05:15:36.636Z"
   },
   {
    "duration": 6536,
    "start_time": "2023-09-15T05:16:21.286Z"
   },
   {
    "duration": 14,
    "start_time": "2023-09-15T05:16:27.824Z"
   },
   {
    "duration": 3,
    "start_time": "2023-09-15T05:16:27.840Z"
   },
   {
    "duration": 2615,
    "start_time": "2023-09-15T05:16:27.845Z"
   },
   {
    "duration": 49,
    "start_time": "2023-09-15T05:16:30.462Z"
   },
   {
    "duration": 17,
    "start_time": "2023-09-15T05:16:30.513Z"
   },
   {
    "duration": 182,
    "start_time": "2023-09-15T05:16:30.532Z"
   },
   {
    "duration": 20,
    "start_time": "2023-09-15T05:16:30.717Z"
   },
   {
    "duration": 39,
    "start_time": "2023-09-15T05:16:30.740Z"
   },
   {
    "duration": 2179,
    "start_time": "2023-09-15T05:16:30.781Z"
   },
   {
    "duration": 779,
    "start_time": "2023-09-15T05:16:32.963Z"
   },
   {
    "duration": 4,
    "start_time": "2023-09-15T05:16:33.744Z"
   },
   {
    "duration": 82,
    "start_time": "2023-09-15T05:16:33.750Z"
   },
   {
    "duration": 6,
    "start_time": "2023-09-15T05:16:33.835Z"
   },
   {
    "duration": 12846,
    "start_time": "2023-09-15T05:16:33.843Z"
   },
   {
    "duration": 1141935,
    "start_time": "2023-09-15T05:16:46.691Z"
   },
   {
    "duration": 9,
    "start_time": "2023-09-15T05:35:48.629Z"
   },
   {
    "duration": 77,
    "start_time": "2023-09-15T05:35:48.640Z"
   },
   {
    "duration": 8,
    "start_time": "2023-09-15T05:35:48.720Z"
   },
   {
    "duration": 6,
    "start_time": "2023-09-15T05:35:48.730Z"
   },
   {
    "duration": 391,
    "start_time": "2023-09-15T05:35:48.738Z"
   },
   {
    "duration": 0,
    "start_time": "2023-09-15T05:35:49.131Z"
   },
   {
    "duration": 0,
    "start_time": "2023-09-15T05:35:49.133Z"
   },
   {
    "duration": 0,
    "start_time": "2023-09-15T05:35:49.134Z"
   },
   {
    "duration": 0,
    "start_time": "2023-09-15T05:35:49.136Z"
   },
   {
    "duration": 6,
    "start_time": "2023-09-15T05:41:47.307Z"
   },
   {
    "duration": 4,
    "start_time": "2023-09-15T05:41:48.014Z"
   },
   {
    "duration": 3,
    "start_time": "2023-09-15T05:41:50.458Z"
   },
   {
    "duration": 5807,
    "start_time": "2023-09-15T05:41:51.706Z"
   },
   {
    "duration": 115,
    "start_time": "2023-09-15T05:42:11.087Z"
   },
   {
    "duration": 1063653,
    "start_time": "2023-09-15T05:42:11.766Z"
   },
   {
    "duration": 19,
    "start_time": "2023-09-15T05:59:55.422Z"
   },
   {
    "duration": 69,
    "start_time": "2023-09-15T05:59:55.443Z"
   },
   {
    "duration": 151,
    "start_time": "2023-09-15T07:00:55.786Z"
   },
   {
    "duration": 108,
    "start_time": "2023-09-15T08:26:30.210Z"
   },
   {
    "duration": 20781,
    "start_time": "2023-09-15T08:26:45.337Z"
   },
   {
    "duration": 65,
    "start_time": "2023-09-15T08:28:04.823Z"
   },
   {
    "duration": 44670,
    "start_time": "2023-09-15T08:28:36.740Z"
   },
   {
    "duration": 66,
    "start_time": "2023-09-15T08:31:20.166Z"
   },
   {
    "duration": 66,
    "start_time": "2023-09-15T08:31:59.203Z"
   },
   {
    "duration": 61,
    "start_time": "2023-09-15T08:32:05.737Z"
   },
   {
    "duration": 64,
    "start_time": "2023-09-15T08:32:14.129Z"
   },
   {
    "duration": 64,
    "start_time": "2023-09-15T08:32:40.702Z"
   },
   {
    "duration": 90685,
    "start_time": "2023-09-15T08:32:52.153Z"
   },
   {
    "duration": 43845,
    "start_time": "2023-09-15T08:58:19.879Z"
   },
   {
    "duration": 55,
    "start_time": "2023-09-15T09:12:51.556Z"
   },
   {
    "duration": 56,
    "start_time": "2023-09-15T09:13:07.587Z"
   },
   {
    "duration": 59,
    "start_time": "2023-09-15T09:13:30.203Z"
   },
   {
    "duration": 55,
    "start_time": "2023-09-15T09:13:45.518Z"
   },
   {
    "duration": 1326,
    "start_time": "2023-09-15T09:14:13.751Z"
   },
   {
    "duration": 55,
    "start_time": "2023-09-15T09:14:49.345Z"
   },
   {
    "duration": 6507,
    "start_time": "2023-09-15T09:15:24.958Z"
   },
   {
    "duration": 56,
    "start_time": "2023-09-15T09:15:40.682Z"
   },
   {
    "duration": 18321,
    "start_time": "2023-09-15T09:16:08.791Z"
   },
   {
    "duration": 56,
    "start_time": "2023-09-15T09:17:39.646Z"
   },
   {
    "duration": 5106,
    "start_time": "2023-09-15T09:17:53.070Z"
   },
   {
    "duration": 14247,
    "start_time": "2023-09-15T09:18:25.269Z"
   },
   {
    "duration": 41641,
    "start_time": "2023-09-15T09:34:35.671Z"
   },
   {
    "duration": 25040,
    "start_time": "2023-09-15T09:36:25.180Z"
   },
   {
    "duration": 8818,
    "start_time": "2023-09-15T09:37:29.720Z"
   },
   {
    "duration": 17084,
    "start_time": "2023-09-15T09:40:40.130Z"
   },
   {
    "duration": 40,
    "start_time": "2023-09-15T09:43:37.231Z"
   },
   {
    "duration": 242,
    "start_time": "2023-09-15T09:44:37.404Z"
   },
   {
    "duration": 5535,
    "start_time": "2023-09-15T09:44:49.909Z"
   },
   {
    "duration": 5631,
    "start_time": "2023-09-15T09:45:21.709Z"
   },
   {
    "duration": 2309,
    "start_time": "2023-09-15T09:45:40.530Z"
   },
   {
    "duration": 39,
    "start_time": "2023-09-15T09:46:11.592Z"
   },
   {
    "duration": 111,
    "start_time": "2023-09-15T09:47:06.493Z"
   },
   {
    "duration": 2219,
    "start_time": "2023-09-15T09:47:16.901Z"
   },
   {
    "duration": 5606,
    "start_time": "2023-09-15T09:48:20.535Z"
   },
   {
    "duration": 5492,
    "start_time": "2023-09-15T10:09:45.845Z"
   },
   {
    "duration": 140,
    "start_time": "2023-09-15T10:45:20.399Z"
   },
   {
    "duration": 56,
    "start_time": "2023-09-15T11:08:41.465Z"
   },
   {
    "duration": 54,
    "start_time": "2023-09-15T11:09:24.228Z"
   },
   {
    "duration": 8019,
    "start_time": "2023-09-15T11:38:37.031Z"
   },
   {
    "duration": 17,
    "start_time": "2023-09-15T11:38:45.052Z"
   },
   {
    "duration": 35,
    "start_time": "2023-09-15T11:38:45.071Z"
   },
   {
    "duration": 2562,
    "start_time": "2023-09-15T11:38:45.110Z"
   },
   {
    "duration": 46,
    "start_time": "2023-09-15T11:38:47.674Z"
   },
   {
    "duration": 4,
    "start_time": "2023-09-15T11:38:47.722Z"
   },
   {
    "duration": 159,
    "start_time": "2023-09-15T11:38:47.727Z"
   },
   {
    "duration": 26,
    "start_time": "2023-09-15T11:38:47.888Z"
   },
   {
    "duration": 8,
    "start_time": "2023-09-15T11:38:47.916Z"
   },
   {
    "duration": 2293,
    "start_time": "2023-09-15T11:38:47.926Z"
   },
   {
    "duration": 788,
    "start_time": "2023-09-15T11:38:50.221Z"
   },
   {
    "duration": 4,
    "start_time": "2023-09-15T11:38:51.011Z"
   },
   {
    "duration": 103,
    "start_time": "2023-09-15T11:38:51.017Z"
   },
   {
    "duration": 26,
    "start_time": "2023-09-15T11:38:51.121Z"
   },
   {
    "duration": 12542,
    "start_time": "2023-09-15T11:38:51.149Z"
   },
   {
    "duration": 983935,
    "start_time": "2023-09-15T11:39:03.693Z"
   },
   {
    "duration": 82,
    "start_time": "2023-09-15T11:55:27.630Z"
   },
   {
    "duration": 6,
    "start_time": "2023-09-15T11:55:27.714Z"
   },
   {
    "duration": 8,
    "start_time": "2023-09-15T11:55:27.722Z"
   },
   {
    "duration": 10,
    "start_time": "2023-09-15T11:55:27.732Z"
   },
   {
    "duration": 6294,
    "start_time": "2023-09-15T11:55:27.744Z"
   },
   {
    "duration": 2730421,
    "start_time": "2023-09-15T11:55:34.040Z"
   },
   {
    "duration": 19,
    "start_time": "2023-09-15T12:41:04.462Z"
   },
   {
    "duration": 29,
    "start_time": "2023-09-15T12:41:04.483Z"
   },
   {
    "duration": 7089,
    "start_time": "2023-09-15T15:43:13.356Z"
   },
   {
    "duration": 9482,
    "start_time": "2023-09-15T15:46:41.662Z"
   },
   {
    "duration": 452,
    "start_time": "2023-09-15T15:47:34.743Z"
   },
   {
    "duration": 9641,
    "start_time": "2023-09-15T15:50:29.696Z"
   },
   {
    "duration": 9,
    "start_time": "2023-09-15T15:52:21.028Z"
   },
   {
    "duration": 5,
    "start_time": "2023-09-15T15:53:12.876Z"
   },
   {
    "duration": 17,
    "start_time": "2023-09-15T15:53:38.541Z"
   },
   {
    "duration": 4,
    "start_time": "2023-09-15T15:54:03.120Z"
   },
   {
    "duration": 61,
    "start_time": "2023-09-15T18:06:15.705Z"
   },
   {
    "duration": 13769,
    "start_time": "2023-09-15T18:06:27.663Z"
   },
   {
    "duration": 0,
    "start_time": "2023-09-15T18:06:41.435Z"
   },
   {
    "duration": 0,
    "start_time": "2023-09-15T18:06:41.436Z"
   },
   {
    "duration": 0,
    "start_time": "2023-09-15T18:06:41.437Z"
   },
   {
    "duration": 0,
    "start_time": "2023-09-15T18:06:41.438Z"
   },
   {
    "duration": 0,
    "start_time": "2023-09-15T18:06:41.438Z"
   },
   {
    "duration": 0,
    "start_time": "2023-09-15T18:06:41.439Z"
   },
   {
    "duration": 0,
    "start_time": "2023-09-15T18:06:41.440Z"
   },
   {
    "duration": 0,
    "start_time": "2023-09-15T18:06:41.441Z"
   },
   {
    "duration": 0,
    "start_time": "2023-09-15T18:06:41.442Z"
   },
   {
    "duration": 0,
    "start_time": "2023-09-15T18:06:41.444Z"
   },
   {
    "duration": 0,
    "start_time": "2023-09-15T18:06:41.446Z"
   },
   {
    "duration": 0,
    "start_time": "2023-09-15T18:06:41.447Z"
   },
   {
    "duration": 0,
    "start_time": "2023-09-15T18:06:41.448Z"
   },
   {
    "duration": 0,
    "start_time": "2023-09-15T18:06:41.449Z"
   },
   {
    "duration": 0,
    "start_time": "2023-09-15T18:06:41.451Z"
   },
   {
    "duration": 0,
    "start_time": "2023-09-15T18:06:41.452Z"
   },
   {
    "duration": 0,
    "start_time": "2023-09-15T18:06:41.453Z"
   },
   {
    "duration": 0,
    "start_time": "2023-09-15T18:06:41.454Z"
   },
   {
    "duration": 0,
    "start_time": "2023-09-15T18:06:41.455Z"
   },
   {
    "duration": 0,
    "start_time": "2023-09-15T18:06:41.457Z"
   },
   {
    "duration": 0,
    "start_time": "2023-09-15T18:06:41.458Z"
   },
   {
    "duration": 0,
    "start_time": "2023-09-15T18:06:41.459Z"
   },
   {
    "duration": 0,
    "start_time": "2023-09-15T18:06:41.460Z"
   },
   {
    "duration": 0,
    "start_time": "2023-09-15T18:06:41.462Z"
   },
   {
    "duration": 5724,
    "start_time": "2023-09-15T20:08:57.538Z"
   },
   {
    "duration": 13,
    "start_time": "2023-09-15T20:09:03.265Z"
   },
   {
    "duration": 2,
    "start_time": "2023-09-15T20:09:03.280Z"
   },
   {
    "duration": 2788,
    "start_time": "2023-09-15T20:09:03.284Z"
   },
   {
    "duration": 43,
    "start_time": "2023-09-15T20:09:06.074Z"
   },
   {
    "duration": 19,
    "start_time": "2023-09-15T20:09:06.118Z"
   },
   {
    "duration": 149,
    "start_time": "2023-09-15T20:09:06.138Z"
   },
   {
    "duration": 17,
    "start_time": "2023-09-15T20:09:06.289Z"
   },
   {
    "duration": 4,
    "start_time": "2023-09-15T20:09:06.308Z"
   },
   {
    "duration": 2524,
    "start_time": "2023-09-15T20:09:06.313Z"
   },
   {
    "duration": 827,
    "start_time": "2023-09-15T20:09:08.839Z"
   },
   {
    "duration": 5,
    "start_time": "2023-09-15T20:09:09.668Z"
   },
   {
    "duration": 87,
    "start_time": "2023-09-15T20:09:09.674Z"
   },
   {
    "duration": 9,
    "start_time": "2023-09-15T20:09:09.764Z"
   },
   {
    "duration": 18920,
    "start_time": "2023-09-15T20:09:09.775Z"
   },
   {
    "duration": 1102246,
    "start_time": "2023-09-15T20:09:28.696Z"
   },
   {
    "duration": 7,
    "start_time": "2023-09-15T20:27:50.944Z"
   },
   {
    "duration": 47,
    "start_time": "2023-09-15T20:27:50.953Z"
   },
   {
    "duration": 6,
    "start_time": "2023-09-15T20:27:51.002Z"
   },
   {
    "duration": 10,
    "start_time": "2023-09-15T20:27:51.009Z"
   },
   {
    "duration": 9022,
    "start_time": "2023-09-15T20:27:51.020Z"
   },
   {
    "duration": 5,
    "start_time": "2023-09-15T20:28:00.043Z"
   },
   {
    "duration": 2629403,
    "start_time": "2023-09-15T20:28:00.050Z"
   },
   {
    "duration": 15,
    "start_time": "2023-09-15T21:11:49.455Z"
   },
   {
    "duration": 95,
    "start_time": "2023-09-15T21:11:49.472Z"
   },
   {
    "duration": 4,
    "start_time": "2023-09-16T01:48:44.325Z"
   },
   {
    "duration": 4,
    "start_time": "2023-09-16T01:50:23.215Z"
   },
   {
    "duration": 322,
    "start_time": "2023-09-16T01:51:23.294Z"
   },
   {
    "duration": 4,
    "start_time": "2023-09-16T01:51:37.813Z"
   },
   {
    "duration": 53318,
    "start_time": "2023-09-16T02:00:56.638Z"
   },
   {
    "duration": 0,
    "start_time": "2023-09-16T02:01:49.958Z"
   },
   {
    "duration": 0,
    "start_time": "2023-09-16T02:01:49.961Z"
   },
   {
    "duration": 0,
    "start_time": "2023-09-16T02:01:49.962Z"
   },
   {
    "duration": 123978,
    "start_time": "2023-09-16T02:02:48.539Z"
   },
   {
    "duration": 0,
    "start_time": "2023-09-16T02:04:52.519Z"
   },
   {
    "duration": 0,
    "start_time": "2023-09-16T02:04:52.520Z"
   },
   {
    "duration": 0,
    "start_time": "2023-09-16T02:04:52.521Z"
   },
   {
    "duration": 47,
    "start_time": "2023-09-16T04:43:47.513Z"
   },
   {
    "duration": 10323,
    "start_time": "2023-09-16T06:55:39.378Z"
   },
   {
    "duration": 0,
    "start_time": "2023-09-16T06:55:49.703Z"
   },
   {
    "duration": 0,
    "start_time": "2023-09-16T06:55:49.705Z"
   },
   {
    "duration": 0,
    "start_time": "2023-09-16T06:55:49.706Z"
   },
   {
    "duration": 0,
    "start_time": "2023-09-16T06:55:49.708Z"
   },
   {
    "duration": 0,
    "start_time": "2023-09-16T06:55:49.709Z"
   },
   {
    "duration": 0,
    "start_time": "2023-09-16T06:55:49.711Z"
   },
   {
    "duration": 0,
    "start_time": "2023-09-16T06:55:49.712Z"
   },
   {
    "duration": 0,
    "start_time": "2023-09-16T06:55:49.714Z"
   },
   {
    "duration": 1,
    "start_time": "2023-09-16T06:55:49.715Z"
   },
   {
    "duration": 0,
    "start_time": "2023-09-16T06:55:49.717Z"
   },
   {
    "duration": 0,
    "start_time": "2023-09-16T06:55:49.719Z"
   },
   {
    "duration": 0,
    "start_time": "2023-09-16T06:55:49.720Z"
   },
   {
    "duration": 0,
    "start_time": "2023-09-16T06:55:49.722Z"
   },
   {
    "duration": 0,
    "start_time": "2023-09-16T06:55:49.723Z"
   },
   {
    "duration": 0,
    "start_time": "2023-09-16T06:55:49.747Z"
   },
   {
    "duration": 0,
    "start_time": "2023-09-16T06:55:49.749Z"
   },
   {
    "duration": 0,
    "start_time": "2023-09-16T06:55:49.751Z"
   },
   {
    "duration": 0,
    "start_time": "2023-09-16T06:55:49.752Z"
   },
   {
    "duration": 0,
    "start_time": "2023-09-16T06:55:49.754Z"
   },
   {
    "duration": 0,
    "start_time": "2023-09-16T06:55:49.755Z"
   },
   {
    "duration": 0,
    "start_time": "2023-09-16T06:55:49.757Z"
   },
   {
    "duration": 0,
    "start_time": "2023-09-16T06:55:49.760Z"
   },
   {
    "duration": 0,
    "start_time": "2023-09-16T06:55:49.762Z"
   },
   {
    "duration": 0,
    "start_time": "2023-09-16T06:55:49.763Z"
   },
   {
    "duration": 0,
    "start_time": "2023-09-16T06:55:49.765Z"
   },
   {
    "duration": 5905,
    "start_time": "2023-09-16T06:56:25.142Z"
   },
   {
    "duration": 12,
    "start_time": "2023-09-16T06:56:31.050Z"
   },
   {
    "duration": 102,
    "start_time": "2023-09-16T06:56:31.063Z"
   },
   {
    "duration": 2609,
    "start_time": "2023-09-16T06:56:31.167Z"
   },
   {
    "duration": 45,
    "start_time": "2023-09-16T06:56:33.778Z"
   },
   {
    "duration": 4,
    "start_time": "2023-09-16T06:56:33.825Z"
   },
   {
    "duration": 157,
    "start_time": "2023-09-16T06:56:33.831Z"
   },
   {
    "duration": 18,
    "start_time": "2023-09-16T06:56:33.990Z"
   },
   {
    "duration": 17,
    "start_time": "2023-09-16T06:56:34.010Z"
   },
   {
    "duration": 2158,
    "start_time": "2023-09-16T06:56:34.028Z"
   },
   {
    "duration": 783,
    "start_time": "2023-09-16T06:56:36.188Z"
   },
   {
    "duration": 5,
    "start_time": "2023-09-16T06:56:36.972Z"
   },
   {
    "duration": 77,
    "start_time": "2023-09-16T06:56:36.978Z"
   },
   {
    "duration": 11,
    "start_time": "2023-09-16T06:56:37.058Z"
   },
   {
    "duration": 18266,
    "start_time": "2023-09-16T06:56:37.071Z"
   },
   {
    "duration": 1120718,
    "start_time": "2023-09-16T06:56:55.339Z"
   },
   {
    "duration": 9,
    "start_time": "2023-09-16T07:15:36.059Z"
   },
   {
    "duration": 15,
    "start_time": "2023-09-16T07:15:36.070Z"
   },
   {
    "duration": 61,
    "start_time": "2023-09-16T07:15:36.086Z"
   },
   {
    "duration": 3,
    "start_time": "2023-09-16T07:15:36.148Z"
   },
   {
    "duration": 9850,
    "start_time": "2023-09-16T07:15:36.153Z"
   },
   {
    "duration": 0,
    "start_time": "2023-09-16T07:15:46.005Z"
   },
   {
    "duration": 1,
    "start_time": "2023-09-16T07:15:46.006Z"
   },
   {
    "duration": 0,
    "start_time": "2023-09-16T07:15:46.008Z"
   },
   {
    "duration": 0,
    "start_time": "2023-09-16T07:15:46.009Z"
   },
   {
    "duration": 0,
    "start_time": "2023-09-16T07:15:46.010Z"
   },
   {
    "duration": 4,
    "start_time": "2023-09-16T07:24:24.285Z"
   },
   {
    "duration": 3,
    "start_time": "2023-09-16T07:24:24.883Z"
   },
   {
    "duration": 9114,
    "start_time": "2023-09-16T07:24:25.092Z"
   },
   {
    "duration": 0,
    "start_time": "2023-09-16T07:24:34.209Z"
   },
   {
    "duration": 0,
    "start_time": "2023-09-16T07:24:34.210Z"
   },
   {
    "duration": 0,
    "start_time": "2023-09-16T07:24:34.211Z"
   },
   {
    "duration": 0,
    "start_time": "2023-09-16T07:24:34.213Z"
   },
   {
    "duration": 0,
    "start_time": "2023-09-16T07:24:34.215Z"
   },
   {
    "duration": 26,
    "start_time": "2023-09-16T07:24:38.471Z"
   },
   {
    "duration": 23,
    "start_time": "2023-09-16T07:24:39.724Z"
   },
   {
    "duration": 4,
    "start_time": "2023-09-16T07:25:02.349Z"
   },
   {
    "duration": 2,
    "start_time": "2023-09-16T07:25:02.678Z"
   },
   {
    "duration": 9355,
    "start_time": "2023-09-16T07:25:02.848Z"
   },
   {
    "duration": 0,
    "start_time": "2023-09-16T07:25:12.205Z"
   },
   {
    "duration": 0,
    "start_time": "2023-09-16T07:25:12.207Z"
   },
   {
    "duration": 0,
    "start_time": "2023-09-16T07:25:12.209Z"
   },
   {
    "duration": 0,
    "start_time": "2023-09-16T07:25:12.211Z"
   },
   {
    "duration": 0,
    "start_time": "2023-09-16T07:25:12.212Z"
   },
   {
    "duration": 5,
    "start_time": "2023-09-16T07:25:38.973Z"
   },
   {
    "duration": 4,
    "start_time": "2023-09-16T07:25:40.567Z"
   },
   {
    "duration": 5,
    "start_time": "2023-09-16T07:25:42.138Z"
   },
   {
    "duration": 9379,
    "start_time": "2023-09-16T07:25:42.515Z"
   },
   {
    "duration": 0,
    "start_time": "2023-09-16T07:25:51.896Z"
   },
   {
    "duration": 0,
    "start_time": "2023-09-16T07:25:51.898Z"
   },
   {
    "duration": 0,
    "start_time": "2023-09-16T07:25:51.899Z"
   },
   {
    "duration": 0,
    "start_time": "2023-09-16T07:25:51.901Z"
   },
   {
    "duration": 0,
    "start_time": "2023-09-16T07:25:51.902Z"
   },
   {
    "duration": 4,
    "start_time": "2023-09-16T07:26:19.379Z"
   },
   {
    "duration": 3,
    "start_time": "2023-09-16T07:26:19.977Z"
   },
   {
    "duration": 8986,
    "start_time": "2023-09-16T07:26:20.388Z"
   },
   {
    "duration": 2796986,
    "start_time": "2023-09-16T07:26:29.376Z"
   },
   {
    "duration": 7216,
    "start_time": "2023-09-16T10:41:44.752Z"
   },
   {
    "duration": 12,
    "start_time": "2023-09-16T10:41:51.970Z"
   },
   {
    "duration": 20,
    "start_time": "2023-09-16T10:41:51.983Z"
   },
   {
    "duration": 2442,
    "start_time": "2023-09-16T10:41:52.006Z"
   },
   {
    "duration": 43,
    "start_time": "2023-09-16T10:41:54.450Z"
   },
   {
    "duration": 20,
    "start_time": "2023-09-16T10:41:54.495Z"
   },
   {
    "duration": 160,
    "start_time": "2023-09-16T10:41:54.517Z"
   },
   {
    "duration": 17,
    "start_time": "2023-09-16T10:41:54.678Z"
   },
   {
    "duration": 34,
    "start_time": "2023-09-16T10:41:54.697Z"
   },
   {
    "duration": 2127,
    "start_time": "2023-09-16T10:41:54.734Z"
   },
   {
    "duration": 784,
    "start_time": "2023-09-16T10:41:56.863Z"
   },
   {
    "duration": 4,
    "start_time": "2023-09-16T10:41:57.649Z"
   },
   {
    "duration": 77,
    "start_time": "2023-09-16T10:41:57.654Z"
   },
   {
    "duration": 13,
    "start_time": "2023-09-16T10:41:57.733Z"
   },
   {
    "duration": 17955,
    "start_time": "2023-09-16T10:41:57.748Z"
   },
   {
    "duration": 1006151,
    "start_time": "2023-09-16T10:42:15.705Z"
   },
   {
    "duration": 7,
    "start_time": "2023-09-16T10:59:01.858Z"
   },
   {
    "duration": 110,
    "start_time": "2023-09-16T10:59:01.866Z"
   },
   {
    "duration": 52,
    "start_time": "2023-09-16T10:59:01.978Z"
   },
   {
    "duration": 48,
    "start_time": "2023-09-16T10:59:02.032Z"
   },
   {
    "duration": 10179,
    "start_time": "2023-09-16T10:59:02.082Z"
   },
   {
    "duration": 1035594,
    "start_time": "2023-09-16T10:59:12.263Z"
   },
   {
    "duration": 2810940,
    "start_time": "2023-09-16T11:16:27.859Z"
   },
   {
    "duration": 2509298,
    "start_time": "2023-09-16T12:03:18.801Z"
   },
   {
    "duration": 21419,
    "start_time": "2023-09-16T12:45:08.101Z"
   },
   {
    "duration": 21,
    "start_time": "2023-09-16T12:45:29.522Z"
   },
   {
    "duration": 10,
    "start_time": "2023-09-16T12:45:29.545Z"
   },
   {
    "duration": 6808,
    "start_time": "2023-09-16T23:07:58.789Z"
   },
   {
    "duration": 11,
    "start_time": "2023-09-16T23:08:05.599Z"
   },
   {
    "duration": 13,
    "start_time": "2023-09-16T23:08:05.612Z"
   },
   {
    "duration": 2448,
    "start_time": "2023-09-16T23:08:05.626Z"
   },
   {
    "duration": 50,
    "start_time": "2023-09-16T23:08:08.076Z"
   },
   {
    "duration": 4,
    "start_time": "2023-09-16T23:08:08.128Z"
   },
   {
    "duration": 171,
    "start_time": "2023-09-16T23:08:08.133Z"
   },
   {
    "duration": 19,
    "start_time": "2023-09-16T23:08:08.306Z"
   },
   {
    "duration": 13,
    "start_time": "2023-09-16T23:08:08.326Z"
   },
   {
    "duration": 1996,
    "start_time": "2023-09-16T23:08:08.346Z"
   },
   {
    "duration": 767,
    "start_time": "2023-09-16T23:08:10.343Z"
   },
   {
    "duration": 4,
    "start_time": "2023-09-16T23:08:11.112Z"
   },
   {
    "duration": 89,
    "start_time": "2023-09-16T23:08:11.117Z"
   },
   {
    "duration": 17,
    "start_time": "2023-09-16T23:08:11.210Z"
   },
   {
    "duration": 18018,
    "start_time": "2023-09-16T23:08:11.229Z"
   },
   {
    "duration": 900704,
    "start_time": "2023-09-16T23:08:29.249Z"
   },
   {
    "duration": 7,
    "start_time": "2023-09-16T23:23:29.955Z"
   },
   {
    "duration": 5,
    "start_time": "2023-09-16T23:23:29.964Z"
   },
   {
    "duration": 7,
    "start_time": "2023-09-16T23:23:29.970Z"
   },
   {
    "duration": 5,
    "start_time": "2023-09-16T23:23:29.978Z"
   },
   {
    "duration": 6370,
    "start_time": "2023-09-16T23:23:29.985Z"
   },
   {
    "duration": 150,
    "start_time": "2023-09-16T23:23:36.449Z"
   },
   {
    "duration": 0,
    "start_time": "2023-09-16T23:23:36.601Z"
   },
   {
    "duration": 0,
    "start_time": "2023-09-16T23:23:36.602Z"
   },
   {
    "duration": 0,
    "start_time": "2023-09-16T23:23:36.603Z"
   },
   {
    "duration": 0,
    "start_time": "2023-09-16T23:23:36.605Z"
   },
   {
    "duration": 0,
    "start_time": "2023-09-16T23:23:36.606Z"
   },
   {
    "duration": 0,
    "start_time": "2023-09-16T23:23:36.607Z"
   },
   {
    "duration": 0,
    "start_time": "2023-09-16T23:23:36.608Z"
   },
   {
    "duration": 0,
    "start_time": "2023-09-16T23:23:36.609Z"
   },
   {
    "duration": 367,
    "start_time": "2023-09-16T23:54:08.200Z"
   },
   {
    "duration": 1344,
    "start_time": "2023-09-16T23:54:09.000Z"
   },
   {
    "duration": 90,
    "start_time": "2023-09-17T00:03:35.398Z"
   },
   {
    "duration": 6857,
    "start_time": "2023-09-17T00:11:42.359Z"
   },
   {
    "duration": 11,
    "start_time": "2023-09-17T00:11:49.219Z"
   },
   {
    "duration": 14,
    "start_time": "2023-09-17T00:11:49.231Z"
   },
   {
    "duration": 2507,
    "start_time": "2023-09-17T00:11:49.246Z"
   },
   {
    "duration": 46,
    "start_time": "2023-09-17T00:11:51.755Z"
   },
   {
    "duration": 10,
    "start_time": "2023-09-17T00:11:51.802Z"
   },
   {
    "duration": 169,
    "start_time": "2023-09-17T00:11:51.814Z"
   },
   {
    "duration": 20,
    "start_time": "2023-09-17T00:11:51.984Z"
   },
   {
    "duration": 19,
    "start_time": "2023-09-17T00:11:52.006Z"
   },
   {
    "duration": 2007,
    "start_time": "2023-09-17T00:11:52.027Z"
   },
   {
    "duration": 786,
    "start_time": "2023-09-17T00:11:54.036Z"
   },
   {
    "duration": 4,
    "start_time": "2023-09-17T00:11:54.824Z"
   },
   {
    "duration": 92,
    "start_time": "2023-09-17T00:11:54.829Z"
   },
   {
    "duration": 33,
    "start_time": "2023-09-17T00:11:54.923Z"
   },
   {
    "duration": 8657,
    "start_time": "2023-09-17T00:11:54.958Z"
   },
   {
    "duration": 876851,
    "start_time": "2023-09-17T00:12:03.617Z"
   },
   {
    "duration": 82,
    "start_time": "2023-09-17T00:26:40.470Z"
   },
   {
    "duration": 123,
    "start_time": "2023-09-17T00:26:40.553Z"
   },
   {
    "duration": 0,
    "start_time": "2023-09-17T00:26:40.678Z"
   },
   {
    "duration": 0,
    "start_time": "2023-09-17T00:26:40.679Z"
   },
   {
    "duration": 0,
    "start_time": "2023-09-17T00:26:40.680Z"
   },
   {
    "duration": 0,
    "start_time": "2023-09-17T00:26:40.681Z"
   },
   {
    "duration": 1,
    "start_time": "2023-09-17T00:26:40.682Z"
   },
   {
    "duration": 0,
    "start_time": "2023-09-17T00:26:40.684Z"
   },
   {
    "duration": 0,
    "start_time": "2023-09-17T00:26:40.686Z"
   },
   {
    "duration": 0,
    "start_time": "2023-09-17T00:26:40.687Z"
   },
   {
    "duration": 0,
    "start_time": "2023-09-17T00:26:40.688Z"
   },
   {
    "duration": 0,
    "start_time": "2023-09-17T00:26:40.689Z"
   },
   {
    "duration": 0,
    "start_time": "2023-09-17T00:26:40.691Z"
   },
   {
    "duration": 0,
    "start_time": "2023-09-17T00:26:40.693Z"
   },
   {
    "duration": 11681,
    "start_time": "2023-09-17T06:02:04.268Z"
   },
   {
    "duration": 0,
    "start_time": "2023-09-17T06:02:15.951Z"
   },
   {
    "duration": 0,
    "start_time": "2023-09-17T06:02:15.952Z"
   },
   {
    "duration": 0,
    "start_time": "2023-09-17T06:02:15.953Z"
   },
   {
    "duration": 0,
    "start_time": "2023-09-17T06:02:15.954Z"
   },
   {
    "duration": 0,
    "start_time": "2023-09-17T06:02:15.955Z"
   },
   {
    "duration": 1,
    "start_time": "2023-09-17T06:02:15.956Z"
   },
   {
    "duration": 0,
    "start_time": "2023-09-17T06:02:15.957Z"
   },
   {
    "duration": 0,
    "start_time": "2023-09-17T06:02:15.958Z"
   },
   {
    "duration": 0,
    "start_time": "2023-09-17T06:02:15.959Z"
   },
   {
    "duration": 0,
    "start_time": "2023-09-17T06:02:15.960Z"
   },
   {
    "duration": 0,
    "start_time": "2023-09-17T06:02:15.961Z"
   },
   {
    "duration": 0,
    "start_time": "2023-09-17T06:02:15.962Z"
   },
   {
    "duration": 0,
    "start_time": "2023-09-17T06:02:15.963Z"
   },
   {
    "duration": 0,
    "start_time": "2023-09-17T06:02:15.965Z"
   },
   {
    "duration": 0,
    "start_time": "2023-09-17T06:02:15.966Z"
   },
   {
    "duration": 0,
    "start_time": "2023-09-17T06:02:15.967Z"
   },
   {
    "duration": 0,
    "start_time": "2023-09-17T06:02:15.968Z"
   },
   {
    "duration": 0,
    "start_time": "2023-09-17T06:02:16.001Z"
   },
   {
    "duration": 0,
    "start_time": "2023-09-17T06:02:16.002Z"
   },
   {
    "duration": 0,
    "start_time": "2023-09-17T06:02:16.003Z"
   },
   {
    "duration": 1,
    "start_time": "2023-09-17T06:02:16.004Z"
   },
   {
    "duration": 0,
    "start_time": "2023-09-17T06:02:16.006Z"
   },
   {
    "duration": 0,
    "start_time": "2023-09-17T06:02:16.007Z"
   },
   {
    "duration": 0,
    "start_time": "2023-09-17T06:02:16.008Z"
   },
   {
    "duration": 0,
    "start_time": "2023-09-17T06:02:16.009Z"
   },
   {
    "duration": 0,
    "start_time": "2023-09-17T06:02:16.010Z"
   },
   {
    "duration": 0,
    "start_time": "2023-09-17T06:02:16.011Z"
   },
   {
    "duration": 0,
    "start_time": "2023-09-17T06:02:16.013Z"
   },
   {
    "duration": 0,
    "start_time": "2023-09-17T06:02:16.014Z"
   },
   {
    "duration": 5813,
    "start_time": "2023-09-17T06:31:06.860Z"
   },
   {
    "duration": 25,
    "start_time": "2023-09-17T06:31:12.676Z"
   },
   {
    "duration": 14,
    "start_time": "2023-09-17T06:31:12.704Z"
   },
   {
    "duration": 2610,
    "start_time": "2023-09-17T06:31:12.720Z"
   },
   {
    "duration": 47,
    "start_time": "2023-09-17T06:31:15.333Z"
   },
   {
    "duration": 4,
    "start_time": "2023-09-17T06:31:15.381Z"
   },
   {
    "duration": 239,
    "start_time": "2023-09-17T06:31:15.387Z"
   },
   {
    "duration": 17,
    "start_time": "2023-09-17T06:31:15.627Z"
   },
   {
    "duration": 167,
    "start_time": "2023-09-17T06:31:15.646Z"
   },
   {
    "duration": 2010,
    "start_time": "2023-09-17T06:31:15.815Z"
   },
   {
    "duration": 804,
    "start_time": "2023-09-17T06:31:17.827Z"
   },
   {
    "duration": 5,
    "start_time": "2023-09-17T06:31:18.634Z"
   },
   {
    "duration": 120,
    "start_time": "2023-09-17T06:31:18.641Z"
   },
   {
    "duration": 38,
    "start_time": "2023-09-17T06:31:18.763Z"
   },
   {
    "duration": 18448,
    "start_time": "2023-09-17T06:31:18.803Z"
   },
   {
    "duration": 918655,
    "start_time": "2023-09-17T06:31:37.253Z"
   },
   {
    "duration": 8,
    "start_time": "2023-09-17T06:46:55.910Z"
   },
   {
    "duration": 7,
    "start_time": "2023-09-17T06:46:55.920Z"
   },
   {
    "duration": 18,
    "start_time": "2023-09-17T06:46:55.929Z"
   },
   {
    "duration": 20,
    "start_time": "2023-09-17T06:46:55.949Z"
   },
   {
    "duration": 5132,
    "start_time": "2023-09-17T06:46:55.971Z"
   },
   {
    "duration": 22812,
    "start_time": "2023-09-17T06:47:01.109Z"
   },
   {
    "duration": 0,
    "start_time": "2023-09-17T06:47:23.924Z"
   },
   {
    "duration": 0,
    "start_time": "2023-09-17T06:47:23.925Z"
   },
   {
    "duration": 0,
    "start_time": "2023-09-17T06:47:23.927Z"
   },
   {
    "duration": 0,
    "start_time": "2023-09-17T06:47:23.928Z"
   },
   {
    "duration": 0,
    "start_time": "2023-09-17T06:47:23.929Z"
   },
   {
    "duration": 0,
    "start_time": "2023-09-17T06:47:23.930Z"
   },
   {
    "duration": 0,
    "start_time": "2023-09-17T06:47:23.931Z"
   },
   {
    "duration": 0,
    "start_time": "2023-09-17T06:47:23.932Z"
   },
   {
    "duration": 1355,
    "start_time": "2023-09-17T06:48:17.668Z"
   },
   {
    "duration": 9395,
    "start_time": "2023-09-17T06:48:19.025Z"
   },
   {
    "duration": 10424,
    "start_time": "2023-09-17T07:32:13.678Z"
   },
   {
    "duration": 12,
    "start_time": "2023-09-17T07:32:24.104Z"
   },
   {
    "duration": 37,
    "start_time": "2023-09-17T07:32:24.118Z"
   },
   {
    "duration": 2572,
    "start_time": "2023-09-17T07:32:24.158Z"
   },
   {
    "duration": 46,
    "start_time": "2023-09-17T07:32:26.731Z"
   },
   {
    "duration": 4,
    "start_time": "2023-09-17T07:32:26.778Z"
   },
   {
    "duration": 152,
    "start_time": "2023-09-17T07:32:26.783Z"
   },
   {
    "duration": 18,
    "start_time": "2023-09-17T07:32:26.937Z"
   },
   {
    "duration": 11,
    "start_time": "2023-09-17T07:32:26.957Z"
   },
   {
    "duration": 5873,
    "start_time": "2023-09-17T07:32:26.971Z"
   },
   {
    "duration": 745,
    "start_time": "2023-09-17T07:32:32.845Z"
   },
   {
    "duration": 3,
    "start_time": "2023-09-17T07:32:33.592Z"
   },
   {
    "duration": 75,
    "start_time": "2023-09-17T07:32:33.602Z"
   },
   {
    "duration": 18,
    "start_time": "2023-09-17T07:32:33.678Z"
   },
   {
    "duration": 10824,
    "start_time": "2023-09-17T07:32:33.697Z"
   },
   {
    "duration": 949693,
    "start_time": "2023-09-17T07:32:44.523Z"
   },
   {
    "duration": 9,
    "start_time": "2023-09-17T07:48:34.218Z"
   },
   {
    "duration": 76,
    "start_time": "2023-09-17T07:48:34.229Z"
   },
   {
    "duration": 57,
    "start_time": "2023-09-17T07:48:34.308Z"
   },
   {
    "duration": 64,
    "start_time": "2023-09-17T07:48:34.367Z"
   },
   {
    "duration": 9169,
    "start_time": "2023-09-17T07:48:34.434Z"
   },
   {
    "duration": 1519,
    "start_time": "2023-09-17T07:48:43.605Z"
   },
   {
    "duration": 9413,
    "start_time": "2023-09-17T07:48:45.126Z"
   },
   {
    "duration": 1082446,
    "start_time": "2023-09-17T07:48:54.542Z"
   },
   {
    "duration": 12610,
    "start_time": "2023-09-17T16:48:03.910Z"
   },
   {
    "duration": 0,
    "start_time": "2023-09-17T16:48:16.523Z"
   },
   {
    "duration": 0,
    "start_time": "2023-09-17T16:48:16.524Z"
   },
   {
    "duration": 0,
    "start_time": "2023-09-17T16:48:16.525Z"
   },
   {
    "duration": 0,
    "start_time": "2023-09-17T16:48:16.526Z"
   },
   {
    "duration": 0,
    "start_time": "2023-09-17T16:48:16.528Z"
   },
   {
    "duration": 0,
    "start_time": "2023-09-17T16:48:16.529Z"
   },
   {
    "duration": 0,
    "start_time": "2023-09-17T16:48:16.530Z"
   },
   {
    "duration": 0,
    "start_time": "2023-09-17T16:48:16.532Z"
   },
   {
    "duration": 0,
    "start_time": "2023-09-17T16:48:16.533Z"
   },
   {
    "duration": 0,
    "start_time": "2023-09-17T16:48:16.534Z"
   },
   {
    "duration": 0,
    "start_time": "2023-09-17T16:48:16.535Z"
   },
   {
    "duration": 0,
    "start_time": "2023-09-17T16:48:16.537Z"
   },
   {
    "duration": 0,
    "start_time": "2023-09-17T16:48:16.538Z"
   },
   {
    "duration": 0,
    "start_time": "2023-09-17T16:48:16.540Z"
   },
   {
    "duration": 1,
    "start_time": "2023-09-17T16:48:16.541Z"
   },
   {
    "duration": 0,
    "start_time": "2023-09-17T16:48:16.544Z"
   },
   {
    "duration": 0,
    "start_time": "2023-09-17T16:48:16.546Z"
   },
   {
    "duration": 0,
    "start_time": "2023-09-17T16:48:16.547Z"
   },
   {
    "duration": 0,
    "start_time": "2023-09-17T16:48:16.548Z"
   },
   {
    "duration": 0,
    "start_time": "2023-09-17T16:48:16.550Z"
   },
   {
    "duration": 0,
    "start_time": "2023-09-17T16:48:16.551Z"
   },
   {
    "duration": 0,
    "start_time": "2023-09-17T16:48:16.552Z"
   },
   {
    "duration": 0,
    "start_time": "2023-09-17T16:48:16.601Z"
   },
   {
    "duration": 0,
    "start_time": "2023-09-17T16:48:16.603Z"
   },
   {
    "duration": 0,
    "start_time": "2023-09-17T16:48:16.604Z"
   },
   {
    "duration": 6745,
    "start_time": "2023-09-17T16:58:16.670Z"
   },
   {
    "duration": 12,
    "start_time": "2023-09-17T16:58:23.417Z"
   },
   {
    "duration": 24,
    "start_time": "2023-09-17T16:58:23.430Z"
   },
   {
    "duration": 2614,
    "start_time": "2023-09-17T16:58:23.456Z"
   },
   {
    "duration": 45,
    "start_time": "2023-09-17T16:58:26.073Z"
   },
   {
    "duration": 30,
    "start_time": "2023-09-17T16:58:26.120Z"
   },
   {
    "duration": 187,
    "start_time": "2023-09-17T16:58:26.152Z"
   },
   {
    "duration": 17,
    "start_time": "2023-09-17T16:58:26.341Z"
   },
   {
    "duration": 84,
    "start_time": "2023-09-17T16:58:26.360Z"
   },
   {
    "duration": 2104,
    "start_time": "2023-09-17T16:58:26.446Z"
   },
   {
    "duration": 824,
    "start_time": "2023-09-17T16:58:28.553Z"
   },
   {
    "duration": 5,
    "start_time": "2023-09-17T16:58:29.379Z"
   },
   {
    "duration": 76,
    "start_time": "2023-09-17T16:58:29.386Z"
   },
   {
    "duration": 8,
    "start_time": "2023-09-17T16:58:29.465Z"
   },
   {
    "duration": 18226,
    "start_time": "2023-09-17T16:58:29.475Z"
   },
   {
    "duration": 1013420,
    "start_time": "2023-09-17T16:58:47.703Z"
   },
   {
    "duration": 80,
    "start_time": "2023-09-17T17:15:41.125Z"
   },
   {
    "duration": 8,
    "start_time": "2023-09-17T17:15:41.206Z"
   },
   {
    "duration": 27,
    "start_time": "2023-09-17T17:15:41.218Z"
   },
   {
    "duration": 40,
    "start_time": "2023-09-17T17:15:41.247Z"
   },
   {
    "duration": 8182,
    "start_time": "2023-09-17T17:15:41.288Z"
   },
   {
    "duration": 2157,
    "start_time": "2023-09-17T17:15:49.472Z"
   },
   {
    "duration": 3809,
    "start_time": "2023-09-17T17:15:51.631Z"
   },
   {
    "duration": 1012005,
    "start_time": "2023-09-17T17:15:55.445Z"
   },
   {
    "duration": 19,
    "start_time": "2023-09-17T17:32:47.452Z"
   },
   {
    "duration": 129,
    "start_time": "2023-09-17T17:32:47.472Z"
   }
  ],
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.9.5"
  },
  "toc": {
   "base_numbering": 1,
   "nav_menu": {},
   "number_sections": true,
   "sideBar": true,
   "skip_h1_title": true,
   "title_cell": "Содержание",
   "title_sidebar": "Contents",
   "toc_cell": true,
   "toc_position": {
    "height": "calc(100% - 180px)",
    "left": "10px",
    "top": "150px",
    "width": "302.391px"
   },
   "toc_section_display": true,
   "toc_window_display": false
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
